较旧的日期被解析为夏令时,即使在Java中不是这样

And*_*s K 5 java timezone date

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

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

以此日期为例:1976年4月25日00:00:00(长值: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) )
Run Code Online (Sandbox Code Playgroud)

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

new org.joda.time.DateTime().withDate( 1976, 4, 25 ).withTime( 0, 0, 0, 0 ).toDate().getTime()
Run Code Online (Sandbox Code Playgroud)

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

Men*_*ild 2

法国于1976年引入夏令时,但丹麦于 1980 年开始实行夏令时。这解释了您观察到的差异,因此除了您的系统时区不同之外,一切都是正确的。您最好在两台计算机上使用相同的显式时区,而不是依赖默认时区。

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