为什么析'23:00'与SimpleDateFormat("hh:mm aa")返回上午11时?
-
18-09-2019 - |
题
为什么析'23:00'与 SimpleDateFormat("hh:mm aa")
返回上午11时?
解决方案
您应该得到一个例外,因为“23:00”是不是有效的字符串,但Java的日期/时间设施的宽松通过默认,处理日期解析时。
的逻辑是23:00 PM是11:00 PM,它是11:00 AM第二天12小时后。您还会看到像“4月31日”被解析为“五一”(4月30日之后一天)。
如果你不想这个问题,将宽松的属性设置为false使用的日期格式#setLenient(布尔),并传入无效的日期/时间时,你会得到一个异常。
其他提示
您希望 “HH:MM AA” 作为您的格式,如果你将解析24小时的时间
。public static void main(String[] args) throws ParseException {
SimpleDateFormat df = new SimpleDateFormat("HH:mm aa");
final Date date = df.parse("23:00 PM");
System.out.println("date = " + df.format(date));
}
输出
date = 23:00 PM
你有没有试过 HH:mm aa
?
HH
是24小时 hh
是为12个。
下面是在的Javadoc
H Hour in day (0-23)
k Hour in day (1-24)
K Hour in am/pm (0-11)
h Hour in am/pm (1-12)
请注意,“H”将是1-12小时。如果你想处理1-24,尝试“K”。为0-23尝试 “H”。但我不希望如果你是在不可能把数据有效的结果。
23:00可以被认为是上午11点的第二天的。 JavaScript和PHP这样的工作相当多,但我不能对Java说话。
我猜想,这确实是这样的:
hours = hours % 12;
,以确保时间是在适当的范围内。
不隶属于 StackOverflow