web-dev-qa-db-ja.com

Joda Timeでタイムゾーンを含む日付を解析するにはどうすればよいですか

このコードスニペットは、解析される文字列のタイムゾーンではなく、常に現在のタイムゾーンに日付を解析します。

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

私が間違っていることは何ですか?

53
Steve McLeod

OK、さらにグーグルは私自身の質問への答えを与えました:use 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");

これは動作します。

75
Steve McLeod

また、あなたが選択することができます:

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