2009-08-25 10 views
52

Este fragmento de código siempre analiza la fecha en la zona horaria actual, y no en la zona horaria de la cadena que se está analizando.Cómo puedo analizar una fecha, incluida la zona horaria con 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 

Genera:

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

mientras que yo esperaba:

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

Alguna idea de lo que estoy haciendo mal?

Respuesta

73

bien, buscar en Google más me dio la respuesta a mi propia pregunta: utilizar withOffsetParsed(), así como:

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

Esto funciona.

+5

Debe aceptar su respuesta. –

+2

Gracias: D ¡Eres un genio! – mgonto

+6

IMO, el comportamiento predeterminado de 'DateTimeFormatter' parece violar el" principio de menor asombro ", especialmente en el contexto de un unmarshaller. Gracias Steve por desenterrar 'withOffsetParsed()'. –

32

también se puede elegir:

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