How to find out if a locale uses AM/PM?
java, jodatime, localization
Solution
Answer to the question how to check if a given locale uses AM/PM notation:
The only common source about such localized data is CLDR from Unicode consortium. Indirectly the JDK loads a small subset of CLDR which can be accessed as follows:
public static boolean usesAmPm(Locale locale) {
DateFormat df = DateFormat.getTimeInstance(DateFormat.FULL, locale);
if (df instanceof SimpleDateFormat) {
return ((SimpleDateFormat) df).toPattern().contains("a");
} else {
return false; // unlikely to happen
}
}
Problem
I have a label displaying only the minutes part of a certain hour of the day. I want it to read "PM" or "00", depending on time zone. My current solution simply uses Joda's `DateTimeFormat.shortTime().withLocale(myLocale)` and takes the last 2 characters from the result. This works, but feels wrong. Instead, I want to check if the given locale uses AM/PM notation, but I haven't found an API call to give me that information. Does it exist, either in JodaTime or the Java libraries themselves? For example, I would like to write something like `usesAmPm(myLocale)) ? DateTimeFormat.forPattern("a") : DateTimeFormat.forPattern("mm")`