Java 新日期(长)给出不同的结果
当我运行此代码时:Java 新日期(长)给出不同的结果,java,date,timezone,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秒)。为
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使用这两种时区?看起来Maven和Eclipse选择了不同的默认时区,仅此而已 不要忘记
Date.toString()
使用默认时区。我个人更喜欢使用UTC值,可能会记录UTC值,而不是本地时间:)添加:
System.out.println(TimeZone.getDefault().getDisplayName());
在计算日期之前。它应该显示不同的时区。默认时区基于JVM使用的语言环境。通过提供以下参数,可以强制JVM使用首选项的区域设置:
$ java -Duser.language=fr -Duser.country=CA
在Maven中,可以使用
Maven\u OPTS
环境变量。还有一篇文章介绍如何在Windows上永久更改区域设置。要指定默认时区,可以设置系统属性user.timezone
。您可以通过将其作为参数传递给JavaVM来实现这一点(您可能需要修改eclipse.ini或等效于Maven的配置文件):
-Duser.timezone=
…或通过编程方式进行设置:
System.setProperty("user.timezone", "<your preferred timezone>");
System.setProperty(“user.timezone”,”);
或者,如果方便,您可以指定每次打印日期时使用的时区:
DateFormat myDateFormat = new SimpleDateFormat("<insert date format string here>");
myDateFormat.setTimeZone(TimeZone.getTimeZone("<your preferred timezone>"));
....
System.out.println(myDateFormat.format(yourDate));
DateFormat myDateFormat=newsimpledateformat(“”);
myDateFormat.setTimeZone(TimeZone.getTimeZone(“”);
....
System.out.println(myDateFormat.format(yourDate));
Java如何确定默认时区?我不知道我给Eclipse提供了与Maven不同的Java时区设置。我如何解决这个问题?遗留代码,因此Joda Time不是一个选项。@Aaron:您可以通过在环境中指定二进制文件来强制Eclipse在启动二进制文件时使用特定的时区。对于Eclipse,您可能也可以做同样的事情,但不清楚在您的情况下哪一个是“正确的”,也不清楚为什么它们不同。在运行Java时,user.timezone
的值是不同的。在Eclipse中,它是US
。在Maven,它是欧洲/苏黎世
user.country
始终是US
。请注意:Java6比Java5更聪明地计算时区。我让Maven在中使用Java6.mavenrc
DateFormat myDateFormat = new SimpleDateFormat("<insert date format string here>");
myDateFormat.setTimeZone(TimeZone.getTimeZone("<your preferred timezone>"));
....
System.out.println(myDateFormat.format(yourDate));