2009-08-25 10 views
52

Ten fragment kodu zawsze analizuje datę w bieżącej strefie czasowej, a nie w strefie czasowej w analizowanym łańcuchu.Jak przeanalizować datę, w tym strefę czasową z czasem Jody

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 

To Wyjścia:

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

natomiast spodziewam:

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

Wszelkie pomysły, co robię źle?

Odpowiedz

73

OK, dalsze Googling dał mi odpowiedź na moje pytanie: wykorzystać withOffsetParsed(), a więc:

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

To działa.

+5

Należy przyjąć swoją odpowiedź. –

+2

Dzięki: D Jesteś genialny! – mgonto

+6

IMO, domyślne zachowanie 'DateTimeFormatter' wydaje się naruszać" zasadę najmniejszego zdziwienia ", szczególnie w kontekście unmarshallera. Dziękuję Steve za odkopanie 'withOffsetParsed()'. –

32

również możesz wybrać:

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