为什么使用SimpleDateFormat(“hh:mm aa”)解析’23:00 PM’返回上午11点?
为什么使用SimpleDateFormat("hh:mm aa")
解析’23:00 PM’返回上午11点?
您应该获得exception,因为“23:00 PM”不是有效的字符串,但在处理日期解析时,Java的日期/时间工具默认是宽松的。
逻辑是23:00 PM是在晚上11:00之后的12小时,即第二天的11:00 AM。 您还会看到“4月31日”被解析为“5月1日”(4月30日后的一天)。
如果您不想要这种行为,请使用DateFormat #setLenient(boolean)在SimpleDateFormat 上将lenient属性设置为false,并在传递无效日期/时间时获得exception。
如果要解析24小时制,你想要“HH:mm aa”作为格式。
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;
确保工作时间在适当的范围内。