2009-08-25 67 views
52

這段代碼始終將日期解析到當前時區,而不是解析到正在解析的字符串中的時區。如何解析包含Joda時間的時區日期

final DateTimeFormatter df = DateTimeFormat 
     .forPattern("EEE MMM dd HH:mm:ss 'GMT'Z yyyy"); 
final DateTime dateTime = df 
     .parseDateTime("Mon Aug 24 12:36:46 GMT+1000 2009"); 
System.out.println("dateTime = " + dateTime); 
// outputs dateTime = 2009-08-24T04:36:46.000+02:00 

它輸出:

dateTime = 2009-08-24T04:36:46.000+02:00 

,而我預計:

dateTime = 2009-08-24T04:36:46.000+10:00 

任何想法我做錯了嗎?

回答

73

OK,進一步谷歌搜索給我的回答我自己的問題:使用withOffsetParsed(),像這樣:

final DateTimeFormatter df = DateTimeFormat 
     .forPattern("EEE MMM dd HH:mm:ss 'GMT'Z yyyy"); 
final DateTime dateTime = df.withOffsetParsed() 
     .parseDateTime("Mon Aug 24 12:36:46 GMT+1000 2009"); 

這工作。

+5

你應該接受你的答案。 – 2012-11-15 09:21:25

+2

感謝:D你是一個真正的! – mgonto 2013-07-31 17:34:44

+6

IMO,「DateTimeFormatter」的默認行爲似乎違反了「最不驚人的原則」,特別是在解組器的上下文中。謝謝史蒂夫發掘'withOffsetParsed()'。 – 2015-05-20 02:46:10

32

,你也可以選擇:

// parse using the Paris zone 
DateTime date = formatter.withZone(DateTimeZone.forID("Europe/Paris")).parseDateTime(str);