gpt4 book ai didi

Java Date 构造函数意外行为

转载 作者:行者123 更新时间:2023-11-29 10:09:18 26 4
gpt4 key购买 nike

我只是向 Date 的类构造函数提供值 2160000000(即 1000 * 60 * 60 * 24 * 25 - 仅 25 天)。我预计在这里会看到 1970-01-26 00:00:00,但我收到的是 1970-01-26 03:00:00(额外三个小时)!我还没有发现此构造函数也依赖于 JVM 区域设置的任何要点,我发现的只是关于闰秒的信息。但是闰秒不是同一年单个月份范围内的三个小时。但无论如何,我已经在测试方法中更改了默认语言环境(改为美国语言环境。我位于欧洲)只是为了实验,但没有任何改变。

我只是通过这个收到了这个(我之前已经解释过了,你知道的): 日期 date = new Date(1000* 60 * 60 * 24 * 25);(这仅用于示例目的)。我只使用调试器看到了实际值,仅此而已:

enter image description here

最佳答案

您得到了您期望的 DateDate 为 1970-01-26 00:00:00 UTC。这个时间点相当于 1970-01-26 03:00:00,UTC 偏移 +03:00。

在您的调试器中,您正在查看 Date 对象的私有(private)字段。这些没有为客户记录(这就是重点),所以不要指望任何特定的值。

我相信您会发现 Instant.ofEpochMilli(1000L * 60 * 60 * 24 * 25) 不那么令人困惑。或者更好,Instant.EPOCH.plus(Duration.ofDays(25))。 java.time 是现代 Java 日期和时间 API,使用起来更方便。如果您确实需要 Date 用于您现在不想更改的遗留 API,我建议先获取 Instant,然后使用 Date.from (yourInstant) 这样您就可以最大限度地减少对过时且令人困惑的 Date 类的使用(和依赖)。

最后,更改语言环境没有区别。虽然时区和 UTC 偏移量密切相关(在某种程度上有些人认为它们是相同的 :-),但语言环境与它们没有任何关系。相反,语言环境处理一组用户的语言和文化规范——它甚至不需要绑定(bind)到地理位置。

链接: All about java.util.Date

关于Java Date 构造函数意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49292421/

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