Java - 麻烦解析SimpleDateFormat小时,00和02有效但01没有

时间:2017-03-26 01:51:09

标签: java date

我正在解析约会,“Mar:2017:00:45:00”,“Mar:2017”01:45:00“和”Mar:2017“02:45:00”。

除了“2017年3月1日:2017:00:00”,所有其他人都提供了正确的输出,这些输出总是围绕“2017年3月2日:02:45:00”。

代码

try {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("hh:mm:dd MMM:yyyy");

    Date date = simpleDateFormat.parse("01:45:26 Mar:2017");

    System.out.print(date);
} catch (ParseException e) {
    System.out.print(e.getMessage());
}

“Mar:00:45:26:2017”

的输出
Sun Mar 26 00:45:00 GMT 2017

“3月:01:45:26”的输出

Sun Mar 26 02:45:00 BST 2017

“Mar:02:45:26:2017”

的输出
Sun Mar 26 02:45:00 BST 2017

2 个答案:

答案 0 :(得分:1)

第零天?

您的模式表示第三对数字是日期(dd),但是在00示例中看不到天数为零。

我怀疑第三对数字实际上是而不是日期,并且您的日期缺失。

英国DST Cutover

确实如此,在英国,夏令时(DST)切换“春季前进”是2017-03-29 01:00。 Described here

  

2017年3月26日 - 夏令时开始   当地标准时间即将达到   2017年3月26日星期日凌晨1:00:00时钟转发1小时到   2017年3月26日星期日,当地白天时间凌晨2:00:00

格式化模式区分大小写

另一个问题:您使用了小写hh,您可能应该使用大写HH进行24小时制。

避免遗留日期时间类

此外,您正在使用现在遗留下来的麻烦的旧日期时间类。由java.time类补充。

答案 1 :(得分:0)

显然英国时钟在3月26日凌晨1点发生变化。