这是我的原始代码-
String dateString = "23 Dec 2015 1:4 PM";
Locale locale = new Locale("en_US");
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm a");
DateFormat df = new SimpleDateFormat("dd MMM yyyy HH:mm a", locale);
Date date = null;
try {
date = formatter.parse(dateString);
} catch (ParseException e) {
LOGGER.error(e);
}
String newDate = df.format(date);
System.out.println("oldDate = " + dateString);
System.out.println("newDate = " + newDate);
这是我的输出结果 -
oldDate = 23 Dec 2015 1:4 PM
newDate = 23 Dec 2015 01:04 AM
在oldDate
和newDate
之间有上午下午差异。现在我将DateFormat
代码更改为-
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy hh:mm a");
DateFormat df = new SimpleDateFormat("dd MMM yyyy hh:mm a", locale);
然后我得到了预期的输出,即-
oldDate = 23 Dec 2015 1:4 PM
newDate = 23 Dec 2015 01:04 PM
我知道HH
表示24小时格式,而hh
表示12小时格式。
我的问题是:
如果我使用HH:mm a
代替hh:mm a
,这不应该返回24小时格式的时间吗?
(或者)
如果它默认为12小时格式,它不应该根据提供的日期输入返回相应的上午/下午标记吗?
这只是为了让我理解。
new Locale("en-us")
仍然是错误的。 - Meno HochschildJava 8(1.8.0_121)
的Locale! - Shinde Arjunjava.util.Locale
中的代码片段,第700行清楚地说明我们可以从语言构建Locale。我正在参考Java 8(1.8.0-121)
版本。 - Shinde ArjungetCountry()
为空!)。显然,“en-us”在JRE的深度堆栈中以某种方式被解释为英语,因此让您认为它会起作用。并且API非常清晰,单参数区域设置构造函数仅使用纯语言参数...而不是国家。如果需要确定依赖于国家的周规则(在美国或英国不同),这一点很重要。 - Meno Hochschild