JodaTime: pasar una cadena directamente al constructor de DateTime

Estoy en la zona horaria CEST (+2) y tengo algunas dificultades para entender cómo JodaTime almacena DateTime. Toma este código:

String timeString = "2012-09-10T13:30:00+01:00";
DateTime ddateTime = new DateTime(timeString);
DateTime dtLisbon = ddateTime.withZone(DateTimeZone.forID("Europe/Lisbon"));

Después de ejecutarse, las variables obtienen los siguientes valores:

timeString = '2012-09-10T13:30:00+01:00'
ddateTime = '2012-09-10T14:30:00.000+02:00'
dtLisbon = '2012-09-10T13:30:00.000+01:00'

¿Por qué JodaTime no establece ddateTime en la cadena exacta que estoy enviando? ¿Siempre necesito llamar al método .withZone para obtener el instante correcto?

¡Gracias

preguntado el 10 de septiembre de 12 a las 22:09

1 Respuestas

Deberías estar llamando a un DateTime constructor que toma un DateTimeZone al igual que:

new DateTime(timeString, DateTimeZone.forID("Europe/Lisbon"));

Si repasa las llamadas que hace Joda, que recomiendo encarecidamente para que pueda tener una idea de cómo encajan todas las piezas, verá que la cadena de llamadas va:

DateTime(Object)
  -> BaseDateTime(Object, Chronology)
    -> AbstractConverter.getChronology(Object, Chronology)
      -> DateTimeUtils.getChronology(Chronology)
        -> ISOChronology.getInstance()
          -> DateTimeZone.getDefault()
            -> System.getProperty("user.timezone")

Asi que es por eso ddateTime termina siendo UTC+2, que es su zona horaria, cuando no proporciona un DateTimeZone en lugar de UTC+1, que es la zona horaria en la cadena que proporcionó.

Respondido el 11 de Septiembre de 12 a las 01:09

Todavía estoy aprendiendo Java, así que todavía lucho con algunas cosas, pero tu respuesta es clara. ¡Gracias! - algo nuevo

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.