为什么使用SimpleDateFormat("hh:mm aa")解析'23:00 PM'返回上午11点?

Osc*_*Ryz 11 java datetime simpledateformat

为什么解析'23:00 PM'并SimpleDateFormat("hh:mm aa")返回上午11点?

Jac*_*eow 22

您应该获得异常,因为"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 ,并且在传递无效的日期/时间时会出现异常.

  • 你呢?:) (5认同)

Ste*_*eod 17

如果要解析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));
}
Run Code Online (Sandbox Code Playgroud)

输出

date = 23:00 PM
Run Code Online (Sandbox Code Playgroud)


the*_*sdj 15

你试过HH:mm aa吗?

HH是24小时,而hh12.


Pet*_*ore 5

以下是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) 
Run Code Online (Sandbox Code Playgroud)

请注意,“h”代表 1-12 小时。如果您想处理 1-24,请尝试“k”。0-23 尝试“H”。但如果您输入不可能的数据,我不会期望得到有效的结果。