从Java Locale信息中检测AM / PM与24小时时钟首选项?

时间:2010-12-17 00:18:06

标签: java localization internationalization

我正在寻找一种方法来告诉Java程序,如果某个特定区域设置更喜欢在上午12点/下午或24小时时间显示时间。现在,通常我会使用DateFormat来正确格式化日期,以适合Locale。但是,我正在尝试本地化传输时间表的词干日历显示,这需要对区域设置首选项有一些直接的了解。您可以在此处查看计划示例:

http://onebusaway.org/where/standard/schedule.action?id=1_538

关于如何以编程方式检测12小时AM / PM与24小时的任何想法?

2 个答案:

答案 0 :(得分:3)

您可以像这样探测它:

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");
}

答案 1 :(得分:0)

我找到了另一种方式,比接受的答案稍微迂回:

DateFormat format;
// ...
boolean is24Hour;
if (format instanceof SimpleDateFormat) {
    SimpleDateFormat sdf = (SimpleDateFormat)format;
    String pattern = sdf.toPattern();
    is24Hour = !pattern.contains("a");
}

仍然相当严重,并且它不能与其他DateFormat具体类型一起使用,但获取DateFormat对象的标准方法似乎返回SimpleDateFormat