Java 如何解析包含时区和Joda Time的日期

Java 如何解析包含时区和Joda Time的日期,java,datetime,timezone,jodatime,Java,Datetime,Timezone,Jodatime,这段代码总是将日期解析为当前时区,而不是解析字符串中的时区 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 =

这段代码总是将日期解析为当前时区,而不是解析字符串中的时区

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

你知道我做错了什么吗?

好的,进一步的谷歌搜索给了我自己问题的答案:使用,所以:

这很有效。

您还可以选择:

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

谢谢:D你是个和蔼可亲的人!在我看来,
DateTimeFormatter
的默认行为似乎违反了“最小惊讶原则”,尤其是在解组器的情况下。感谢Steve挖掘了
withOffsetParsed()
。我不得不承认默认行为——即忽略正确解析的时区——是奇怪的。
// parse using the Paris zone
DateTime date = formatter.withZone(DateTimeZone.forID("Europe/Paris")).parseDateTime(str);