Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 新日期(长)给出不同的结果_Java_Date_Timezone - Fatal编程技术网

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));