为什么析'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;

,以确保时间是在适当的范围内。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top