gpt4 book ai didi

Java SimpleDateFormat 不会使用 setLenient(false) 解析 2013 年的特定时间

转载 作者:行者123 更新时间:2023-11-30 03:18:21 25 4
gpt4 key购买 nike

好的,我有一个非常具体的错误,我想知道是否有人知道为什么会发生这种情况。这是代码

public static void main(String[] args) {
String time = "2013-03-10 02:59:26";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
formatter.setLenient(false);
Date modDate;
try {
System.out.println("Date String: " + time);
modDate = formatter.parse(time);
} catch (ParseException e) {
System.out.println("Date String: " + time);
e.printStackTrace();
}

因此,仅当年份为 2013 年、月份为 3 月 (03)、日期为 10 号、时间为 02 小时且分钟为 50 年代的任何位置时,此代码才会引发无法解析的错误。我正在解析一些以毫秒为单位记录的日志文件,因此在这个时间范围内有很多内容,并且由于某种原因,它仅在日志文件中的那十分钟内抛出无法解析的错误。我尝试过调查一切,对我来说这看起来像是一次真正的约会。解决这个问题的一件事是 setLenient(true);但我想知道为什么 setLenient(false) 会失败? (Windows 7 上的 Java 7)

最佳答案

根据您的默认时区,由于 daylight savings time. 的“提前”,该时刻可能不存在。

美国实行夏令时的地区从三月的第二个星期天早上开始,本地时间凌晨 2 点到 3 点之间的时间被跳过。由于时钟从 01:59:59 变为 03:00:00,因此当天没有 02:59:59。

日志文件中的字符串代表时间点;在内部,这些时刻存储为自 1970 年(UTC)以来的毫秒数。 这是您在解析字符串时想要重建的值。 (Date 实例只是这个数字的包装,并且不携带有关本地时区等的任何信息。)您应该能够通过将解析器设置为相同的值来恢复原始日期记录时格式化日期时使用的时区。

关于Java SimpleDateFormat 不会使用 setLenient(false) 解析 2013 年的特定时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31970571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com