2011-01-07 75 views
13

我有兩個時間戳,它們以兩種不同的格式描述相同的時間。Joda與時區的分析日期

2010-10-03 18:58:072010-10-03T16:58:07.000+02:00

我用兩個不同的日期格式化器與Joda解析時間戳。最後,我希望有兩個DateTime對象在相同的時刻相同。

DateFormatter提供了幾種方法來控制時區和地區,但我無法讓它工作。

這是我想工作的代碼:

final String date1 = "2010-10-03 18:58:07"; // Europe/Berlin local time 
    final DateTimeFormatter formatter1 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); 
    final DateTime dateTime1 = formatter1.parseDateTime(date1); 

    final String date2 = "2010-10-03T16:58:07.000+02:00"; // Europe/Berlin local time with time zone 
    final DateTimeFormatter formatter2 = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
    final DateTime dateTime2 = formatter2.parseDateTime(date2); 

    Assert.assertTrue(dateTime1.isEqual(dateTime2)); 

在此先感謝如果有人能幫助我!

回答

6

如果您的默認時間zome是歐洲/柏林,2010-10-03 18:58:07對應於2010-10-03T16:58:07.000 + 00:00。

您可能會誤解字符串表示中的時區字段。您的時間戳2010-10-03T16:58:07.000 + 02:00意味着「在距格林威治標準時間+2小時的時區爲16:58:07」或其他措詞「現在是16 :58:07在柏林」我假設你預計它意味着它是16點58分07秒GMT

+0

「2010-10-03T16:58:07.000 + 02:00」表示不是GMT時間爲+2小時的時區不是16:58:07)「。它必須是:「2010-10-03T16:58:07.000 + 02:00表示在UTC時間偏移+2小時的時區爲16:58:07)」 – MicSim 2011-01-07 13:37:39

4

你兩個時間戳並不代表在同一​​時刻(如jambjo已經說過)查看Time zone as offsets from UTC?維基百科上。

也看到它是如何工作的parseDateTime文檔。如果不提供任何時區,則默認時區將應用(也就是柏林時區UTC + 2,如果你在那裏)。所以:

  • 2010-10-03 18:58:07變爲2010-10-03T18:58:07.000+02:00(18:58在柏林,與UTC的偏移爲2小時,即UTC的16:58)如預期。
  • 2010-10-03T16:58:07.000+02:00停留,因爲它是,因爲沒有提供一個時間段(即在柏林與16:58抵消2小時UTC,這意味着在14:58 UTC)

希望你有這個想法。您需要使用withZone方法調整時間以獲得理想的結果。