2011-01-07 14 views
13

Tengo dos marcas de tiempo que describen el mismo instante de tiempo en dos formatos diferentes.Fecha de análisis con Joda con zona horaria

2010-10-03 18:58:07 y 2010-10-03T16:58:07.000+02:00.

Analizo las marcas de tiempo con dos formateadores de fecha diferentes con Joda. Al final quiero tener dos objetos DateTime que sean iguales en términos de ser el mismo instante de tiempo.

DateFormatter ofrece varios métodos para controlar las zonas horarias y las configuraciones regionales, pero no pude conseguir que funcionase.

Este es el código que me gustaría trabajar:

final String date1 = "2010-10-03 18:58:07"; // Europe/Berlin local time 
    final DateTimeFormatter formatter1 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); 
    final DateTime dateTime1 = formatter1.parseDateTime(date1); 

    final String date2 = "2010-10-03T16:58:07.000+02:00"; // Europe/Berlin local time with time zone 
    final DateTimeFormatter formatter2 = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
    final DateTime dateTime2 = formatter2.parseDateTime(date2); 

    Assert.assertTrue(dateTime1.isEqual(dateTime2)); 

Gracias de antemano si alguien me puede ayudar!

Respuesta

6

Si su zona horaria predeterminada es Europa/Berlín, 2010-10-03 18:58:07 corresponde a 2010-10-03T16: 58: 07.000 + 00: 00.

Probablemente malinterprete el campo de la zona horaria en la representación de la cadena. Su marca de tiempo 2010-10-03T16: 58: 07,000 + 02: 00 significa que "es 16:58:07 en una zona horaria con un desplazamiento de +2 horas desde GMT), o en otra redacción" ahora es 16 : 58: 07 en Berlín ". Supongo que esperabas que significara que son las 16:58:07 GMT?

+0

Tiene un tipo en "2010-10-03T16: 58: 07.000 + 02: 00 significa que no es 16:58:07 en una zona horaria con un desplazamiento de +2 horas desde GMT)". Debe leer: "2010-10-03T16: 58: 07,000 + 02: 00 significa que es 16:58:07 en una zona horaria con un desplazamiento de +2 horas desde UTC)" – MicSim

+0

Sí, esperaba que fuera 16 : 58: 07 GMT. Entonces parece que las marcas de tiempo simplemente se han roto. Estas son marcas de tiempo de dos archivos de registro diferentes de diferentes servidores. Y estoy bastante seguro de que especifican el mismo evento. Así que de esto se originó mi confusión. – wilfried

+0

@MacSim: Claro, escribí un poco demasiado rápido allí. – jarnbjo

4

Tus dos marcas de tiempo no representan el mismo instante en el tiempo (como ya mencionó jambjo). Ver Time zone as offsets from UTC en wikipedia.

Consulte también la documentación parseDateTime sobre cómo funciona.Si no proporciona ninguna zona horaria, se aplicará la zona horaria predeterminada (es decir, la zona horaria de Berlín UTC + 2 si se encuentra allí). Entonces:

  • 2010-10-03 18:58:07 se convierte en 2010-10-03T18:58:07.000+02:00 (18:58 en Berlín con un desplazamiento de 2 horas a UTC, lo que significa 16:58 en UTC) como se esperaba.
  • 2010-10-03T16:58:07.000+02:00 se queda como está, porque hay una zona de tiempo previsto (es decir, 16:58 en Berlín con desplazamiento de 2 horas a UTC, que significa 14:58 en UTC)

Espero que tengas la idea . Tendrá que ajustar los tiempos con el método withZone para obtener los resultados deseados.

Cuestiones relacionadas