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

Aar*_*lla 11 java timezone date

当我运行此代码时:

System.out.println( "XXX date=" + new Date( 1311781583373L ) );
Run Code Online (Sandbox Code Playgroud)

我在Eclipse的JUnit运行器中得到了这个结果:

XXX date=Wed Jul 27 16:46:23 GMT+01:00 2011
Run Code Online (Sandbox Code Playgroud)

这从命令行导致Maven:

XXX date=Wed Jul 27 17:46:23 CEST 2011
Run Code Online (Sandbox Code Playgroud)

如你所见,时间不同.

(相同的计算机,相同的Java版本,可能相差30秒).为什么?

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

或者换一种说法:我如何强迫Java使用?

Jon*_*eet 6

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

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


Mik*_*ffe 5

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

-Duser.timezone=<your preferred timezone>
Run Code Online (Sandbox Code Playgroud)

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

 System.setProperty("user.timezone", "<your preferred timezone>");
Run Code Online (Sandbox Code Playgroud)

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

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