如何使用Joda Time解析包含时区的日期

Ste*_*eod 53 java timezone datetime 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 = " + dateTime);
// outputs dateTime = 2009-08-24T04:36:46.000+02:00
Run Code Online (Sandbox Code Playgroud)

它输出:

dateTime = 2009-08-24T04:36:46.000+02:00
Run Code Online (Sandbox Code Playgroud)

而我期望:

dateTime = 2009-08-24T04:36:46.000+10:00
Run Code Online (Sandbox Code Playgroud)

我有什么想法我做错了吗?

Ste*_*eod 75

好的,进一步的谷歌搜索给了我自己的问题的答案:使用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");
Run Code Online (Sandbox Code Playgroud)

这有效.

  • IMO,`DateTimeFormatter`的默认行为似乎违反了"最不惊讶的原则",特别是在unmarshaller的背景下.谢谢史蒂夫发掘出'withOffsetParsed()`. (6认同)
  • 谢谢:D你是一个天才! (2认同)

z0m*_*1ek 35

你也可以选择:

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