2013-06-28 46 views
2

我的代码有问题,我刚刚找到原因,但不知道如何解决它。 当我运行下面的代码在我的笔记本:不同服务器上的SimpleDateFormat问题

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
long processingTime = df.parse("2013-05-20").getTime(); 
System.out.println(processingTime); 

输出为:

1369033200000 

但是,当我在亚马逊的服务器上运行相同的代码, 输出是:

1369008000000 

我该如何解决这个问题?

+0

这可能是由于两台机器上的时区和/或区域设置不同吗? – stakx

回答

2

您需要指定时区。更好地利用图书馆乔达在远更适合约会操作:

http://mvnrepository.com/artifact/joda-time/joda-time/2.2

在看看:

http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormatter.html

,并指定时区和语言环境。

您可以在此similiar问题看一看: new Date(long) gives different results

编辑:

我为你写一个单元测试:

@Test 
    public void testPattern(){ 
     DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd") 
       .withLocale(Locale.ENGLISH) 
       .withZone(DateTimeZone.UTC); 
     long time = formatter.parseDateTime("2013-05-20").getMillis(); 
     assertEquals(1369008000000L, time); 

    } 

为了确保它是正确的,你可以运行你的单元测试(我使用maven surefire插件来运行我的junit测试),但是这个参数可以用于任何jvm:

第一次尝试运行它在一个区域,e.g:

-Duser.timezone="Europe/Amsterdam' 

然后尝试在其他区域中运行它,e.g:

-Duser.timezone="Pacific/Honolulu' 

那么你的单元测试不应该在任何情况下失败。