JodaTime: pasar una cadena directamente al constructor de DateTime
Frecuentes
Visto 1,700 veces
3
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
1 Respuestas
6
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
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java constructor jodatime or haz tu propia pregunta.
Todavía estoy aprendiendo Java, así que todavía lucho con algunas cosas, pero tu respuesta es clara. ¡Gracias! - algo nuevo