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

时间:2015-06-10 10:42:41

标签: java date timezone

我在显示存储为多个日期的日期时遇到问题。 我使用带有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) )

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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