2012-09-10 34 views
3

我在CEST時區(+2)上,並且在理解JodaTime如何存儲DateTime時遇到一些困難。把這個代碼:JodaTime-將一個字符串直接傳遞給DateTime的構造函數

String timeString = "2012-09-10T13:30:00+01:00"; 
DateTime ddateTime = new DateTime(timeString); 
DateTime dtLisbon = ddateTime.withZone(DateTimeZone.forID("Europe/Lisbon")); 

運行後,變量獲得以下值:

timeString = '2012-09-10T13:30:00+01:00' 
ddateTime = '2012-09-10T14:30:00.000+02:00' 
dtLisbon = '2012-09-10T13:30:00.000+01:00' 

爲什麼不JodaTime設置ddateTime給我送的確切字符串?我是否總是需要使用.withZone方法來獲得正確的時間?

謝謝

回答

5

你應該調用DateTime構造函數,一個DateTimeZone像這樣:

new DateTime(timeString, DateTimeZone.forID("Europe/Lisbon")); 

如果通過電話喬達正在,我強烈建議這樣你可以得到一個步驟覺得所有的部分是如何組合在一起,你會看到調用鏈雲:

DateTime(Object) 
    -> BaseDateTime(Object, Chronology) 
    -> AbstractConverter.getChronology(Object, Chronology) 
     -> DateTimeUtils.getChronology(Chronology) 
     -> ISOChronology.getInstance() 
      -> DateTimeZone.getDefault() 
      -> System.getProperty("user.timezone") 

所以這就是爲什麼當您不提供DateTimeZone而不是UTC + 1(這是您提供的字符串中的時區)時,最終會成爲UTC + 2,這是您的時區。

+0

我還在學習Java,所以我仍然與一些事情鬥爭,但你的答案是明確的。謝謝! –

相關問題