新日期(长)给出不同的结果

时间:2011-08-08 12:11:44

标签: java date timezone

当我运行此代码时:

System.out.println( "XXX date=" + new Date( 1311781583373L ) );

我在Eclipse的JUnit runner中得到了这个结果:

XXX date=Wed Jul 27 16:46:23 GMT+01:00 2011

,这从命令行中导致Maven:

XXX date=Wed Jul 27 17:46:23 CEST 2011

如你所见,时间不同。

(相同的计算机,相同的Java版本,相隔30秒)。为什么呢?

[编辑] 此外,时区也不同。为什么Java从Maven启动时使用CEST,从Eclipse启动时使用GMT+01:00

或者换句话说:我如何强制Java使用?

3 个答案:

答案 0 :(得分:6)

看起来Maven和Eclipse已经选择了不同的默认时区,就是这样。

不要忘记Date.toString()使用默认时区。我个人更喜欢使用Joda Time并且可能记录UTC值而不是本地时间:)

答案 1 :(得分:5)

要指定默认时区,您可以设置系统属性user.timezone。您可以通过将其作为参数传递给JavaVM来执行此操作(您可能需要修改eclipse.ini或Maven等效配置文件):

-Duser.timezone=<your preferred timezone>

...或通过编程方式设置:

 System.setProperty("user.timezone", "<your preferred timezone>");

或者,如果方便的话,您可以指定每次打印日期时使用的时区:

DateFormat myDateFormat = new SimpleDateFormat("<insert date format string here>");    
myDateFormat.setTimeZone(TimeZone.getTimeZone("<your preferred timezone>")); 
....
System.out.println(myDateFormat.format(yourDate));

答案 2 :(得分:3)

添加:

System.out.println(TimeZone.getDefault().getDisplayName());

在计算日期之前。它应该显示不同的时区。默认时区基于JVM使用的语言环境。您可以通过向JVM提供以下参数来强制JVM使用您的首选项:

$ java -Duser.language=fr -Duser.country=CA

在Maven中,您可以使用MAVEN_OPTS环境变量。另外,here是一篇描述如何在Windows上永久更改语言环境的文章。