2013-06-28 59 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' 

那麼你的單元測試不應該在任何情況下失敗。