我正在寻找一种方法来告诉Java程序,如果某个特定区域设置更喜欢在上午12点/下午或24小时时间显示时间。现在,通常我会使用DateFormat来正确格式化日期,以适合Locale。但是,我正在尝试本地化传输时间表的词干日历显示,这需要对区域设置首选项有一些直接的了解。您可以在此处查看计划示例:
http://onebusaway.org/where/standard/schedule.action?id=1_538
关于如何以编程方式检测12小时AM / PM与24小时的任何想法?
答案 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
。