我有一个标签,只显示当天某小时的分钟部分.我想让它读取"PM"或"00",具体取决于时区.
我目前的解决方案只使用Joda's DateTimeFormat.shortTime().withLocale(myLocale)
并从结果中取出最后2个字符.这有效,但感觉不对.
相反,我想检查给定的语言环境是否使用AM/PM表示法,但我还没有找到API调用来向我提供该信息.它是否存在,无论是在JodaTime还是Java库本身?例如,我想写一些类似的东西usesAmPm(myLocale)) ? DateTimeFormat.forPattern("a") : DateTimeFormat.forPattern("mm")
这与Meno的答案非常相似,但我不喜欢这种instanceof
用法(我想是某种形式的强迫症).这是我的版本:
public static boolean usesAmPm(Locale locale) { String pattern = DateTimeFormatterBuilder.getLocalizedDateTimePattern( FormatStyle.MEDIUM, FormatStyle.MEDIUM, IsoChronology.INSTANCE, locale); return pattern.contains("a"); }
回答如何检查给定语言环境是否使用AM/PM表示法的问题:
关于此类本地化数据的唯一常见来源是来自Unicode联盟的CLDR.间接地,JDK加载一小部分CLDR,可以按如下方式访问:
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 } }