2009-08-25 71 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);