gpt4 book ai didi

java - 较旧的日期被解析为夏令时,即使在 Java 中并非如此

转载 作者:搜寻专家 更新时间:2023-10-31 20:27:21 24 4
gpt4 key购买 nike

我在显示多个存储为 longs 的日期时遇到问题。我使用带有 long 参数的构造函数创建日期对象,然后将日期打印到 PDF 文件。

但是,与 Windows 相比,在 Linux 上运行该程序时,我遇到了旧日期的问题。

以这个日期:25. april 1976 00:00:00 (long value: 199231200000L)为例。如果我使用 dateformater 来显示日期,它将在 Linux 和 Windows 上显示不同:

在 Windows 上:1976 年 4 月 25 日 00:00:00 CEST

在 Linux 上:1976 年 4 月 24 日 23:00:00 CET

文本代表。可以简单地通过运行以下行来显示:

DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL ).format( new Date( 199231200000L) )

我用了Joda Time获取此测试的日期值:

new org.joda.time.DateTime().withDate( 1976, 4, 25 ).withTime( 0, 0, 0, 0 ).toDate().getTime()

为什么 Windows 将输出显示为 CEST,而 Linux 显示为 CET?

最佳答案

France在 1976 年引入了夏令时,但是 Denmark在 1980 年开始夏令时。这解释了您观察到的差异,所以除了您的系统时区不同之外,一切都是正确的。您最好在两台机器上使用相同的显式时区,而不是依赖默认时区。

顺便说一句,如果我查看您使用的时间戳,那么我看不到毫秒或只有分钟的部分,这让我想如果意图只是存储一个纯日历日期。如果是这样,那么使用时区通常是危险的,因为您的问题清楚地说明了这一点。现在 Java-8 具有用于此目的的 LocalDate 类型 - 幸运的是。

关于java - 较旧的日期被解析为夏令时,即使在 Java 中并非如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30754007/

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