我在显示存储为long的日期时遇到问题。我使用接受long参数的构造函数创建date对象,然后将日期打印到PDF文件中。
但是,与在Windows上运行程序相比,在Linux上运行程序时,我遇到了一个旧日期的问题。
以这个日期为例:25。april 1976 00:00:00(长值:199231200000L)为例。如果我使用日期格式化器来显示日期,它在Linux和Windows上的显示方式会有所不同:在Windows: 25。1976年4月00:00:00 CEST
Linux: 24。1976年4月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?
法国在1976年引入夏令时,而丹麦在1980年开始夏令时。这解释了您观察到的差异,因此除了系统时区不同之外,其他都是正确的。您最好在两台机器上使用相同的显式时区,而不要依赖默认时区。
顺便说一下,如果我查看您使用的时间戳,那么我看不到毫秒或分钟部分,这使我认为如果意图只是存储一个纯日历日期。如果是这样,那么使用时区通常是危险的,正如您的问题清楚地说明的那样。幸运的是,现在Java-8具有用于此目的的类型LocalDate
。