Pregunta

Mi zona horaria es CET (Berlín).
Y mientras que las pruebas de DateTime Joda me di cuenta de algunas cosas extrañas:

new DateTime(1893, 4, 1, 0, 0, 0, 0);
=>  java.lang.IllegalArgumentException: Illegal instant due to time zone offset transition: 

new DateTime(1893, 3, 31, 0, 0, 0, 0).toDate();
=>  Fri Mar 31 00:06:32 CET 1893

A 6 minutos 32 segundos cambio en la zona de tiempo que resulta en un tiempo inexistente ??
Debo decir que esto es muy inesperado, ya que no se ha especificado ninguna información de zona horaria y por lo tanto no esperaba encontrarse con este tipo de problema.
Si en Marzo de 1893 CET (Berlín) no existe - ¿por qué no new DateTime(1893, 3, 31, 0, 0, 0, 0) recoger el huso horario que coincide con el tiempo que se especifica (es decir, 0 minutos y 0 segundos)

?

¿Cuáles son mis opciones para obtener la hora correcta con DateTime?

- EDITAR -
El problema parece ser la TODATE (). Yo había editado un vistazo antes de la publicación de la cuestión.
Joda sí funciona realmente bien:

new DateTime(1893, 3, 31, 0, 0, 0, 0);
=>  1893-01-01T00:00:00.000+00:53:28

Es sólo que la conversión hasta la fecha se mueve parte del desplazamiento en los minutos y segundos.

¿Fue útil?

Solución

Si no se especifica una zona horaria, por desgracia Joda Time utiliza el sistema uno. Y sí, Berlín realmente hicieron cambiar al que el tiempo (y por 6 minutos y 32 segundos). Así que estabas especificando una hora local que no existía.

¿Qué quiere decir con "¿Por qué no [...] elegir el huso horario que coincide con el tiempo he especificado?" - la zona horaria afecta a la hora local se asigna a UTC. En la zona horaria que implícitamente especificada (por dejar que se escoja su defecto del sistema) no existía ese momento; ningún instante UTC asigna a esa hora local. Hay un gran número de zonas horarias que le mapear esa hora local -? ¿Cómo Joda saber cuál elegir

Estoy de acuerdo que el uso de la zona horaria por defecto del sistema es un mal movimiento por parte de Joda (y uno fijamos en Noda Tiempo ) pero todo el resto del comportamiento es absolutamente bien. (Noda El tiempo tiene una excepción específica para esta situación exactamente para distinguirlo del que pasa en los valores que son más obviamente mal, pero hay que ir.)

Si no desea que las zonas de tiempo para entrar en ella en absoluto a continuación, se debe utilizar un LocalDateTime lugar.

Otros consejos

¿Usted intentó generar ejemplares el artículo con new DateTime(1893, 4, 1, 0, 0, 0, 0, DateTimeZone.UTC);?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top