我正在解析日期“00:45:00 Mar:2017”、“01:45:00 Mar:2017”和“02:45:00 Mar:2017”。
除了“01:45:00 Mar:2017”之外,所有其他输出都给出正确的输出,该输出始终四舍五入为“02:45:00 Mar:2017”。
代码
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());
}
“2017 年 3 月 00:45:26”的输出
Sun Mar 26 00:45:00 GMT 2017
“2017 年 3 月 01:45:26”的输出
Sun Mar 26 02:45:00 BST 2017
“2017 年 3 月 02:45:26”的输出
Sun Mar 26 02:45:00 BST 2017
最佳答案
第 0 天?
您的模式表示第三对数字是月份中的某一天 (dd
),但不能有日期数字零,如 00
示例中所示。
我怀疑第三对数字实际上是秒而不是月份,并且您的月份日期丢失了。
英国 DST 切换
确实如此,在英国,夏令时 (DST) 切换“ Spring 提前”是 2017 年 3 月 29 日 01:00。 Described here :
Mar 26, 2017 - Daylight Saving Time Started When local standard time was about to reach Sunday, March 26, 2017, 1:00:00 am clocks were turned forward 1 hour to Sunday, March 26, 2017, 2:00:00 am local daylight time instead
格式模式区分大小写
另一个问题:您使用了小写 hh
,而您可能应该使用大写 HH
来表示 24 小时制。
避免遗留日期时间类
此外,您正在使用现在已成为遗留问题的旧日期时间类。被 java.time 类取代。
关于Java - 解析 SimpleDateFormat 小时时出现问题,00 和 02 有效,但 01 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43024090/