从Java语言环境信息中检测AM/PM与24小时时钟首选项?

从Java语言环境信息中检测AM/PM与24小时时钟首选项?,java,localization,internationalization,Java,Localization,Internationalization,我正在寻找一种方法,可以在Java程序中判断某个特定的区域设置是否更喜欢以12小时am/PM或24小时时钟显示时间。现在,通常我只需要使用DateFormat来正确地设置日期的格式,以适合本地环境。然而,我正在尝试将公交时刻表的茎叶日历显示本地化,这需要对区域设置首选项有一些直接的了解。您可以在此处看到一个明细表示例: 关于如何以编程方式检测12小时的上午/下午和24小时,您有什么想法吗?您可以这样探索: boolean hasAmPmClock(Locale locale) {

我正在寻找一种方法,可以在Java程序中判断某个特定的区域设置是否更喜欢以12小时am/PM或24小时时钟显示时间。现在,通常我只需要使用DateFormat来正确地设置日期的格式,以适合本地环境。然而,我正在尝试将公交时刻表的茎叶日历显示本地化,这需要对区域设置首选项有一些直接的了解。您可以在此处看到一个明细表示例:


关于如何以编程方式检测12小时的上午/下午和24小时,您有什么想法吗?

您可以这样探索:

boolean hasAmPmClock(Locale locale) {
        DateFormat stdFormat = DateFormat.getTimeInstance(DateFormat.SHORT,
                Locale.US);
        DateFormat localeFormat = DateFormat.getTimeInstance(DateFormat.LONG,
                locale);
        String midnight = "";
        try {
            midnight = localeFormat.format(stdFormat.parse("12:00 AM"));
        } catch (ParseException ignore) {
        }
        return midnight.contains("12");
}

我找到了另一种比公认的答案更不迂回的方法:

DateFormat format;
// ...
boolean is24Hour;
if (format instanceof SimpleDateFormat) {
    SimpleDateFormat sdf = (SimpleDateFormat)format;
    String pattern = sdf.toPattern();
    is24Hour = !pattern.contains("a");
}
仍然非常糟糕,它不适用于其他
DateFormat
具体类型,但是获取
DateFormat
对象的标准方法似乎返回
SimpleDateFormat