2009-08-25 3 views
52

Dieser Code-Schnipsel immer analysiert das Datum in die aktuelle Zeitzone, ein Datum einschließlich Zeitzone mit Joda Zeit analysieren und nicht in die Zeitzone in der Zeichenfolge analysiert werden.Wie kann ich

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 

Es gibt:

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

während ich erwarten:

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

Alle Ideen, was ich falsch mache?

Antwort

73

OK, weiter gab googeln mir die Antwort auf meine eigene Frage: Verwenden Sie withOffsetParsed(), wie so:

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"); 

Dies funktioniert.

+5

Sie sollten Ihre Antwort akzeptieren. –

+2

Danke: D Du bist ein Genie! – mgonto

+6

IMO, scheint das Standardverhalten von 'DateTimeFormatter' das" Prinzip der geringsten Verwunderung "zu verletzen, insbesondere im Zusammenhang mit einem Unmarshaller. Danke Steve für das Ausgraben von 'withOffsetParsed()'. –

32

Sie können auch wählen:

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