2011-10-24 19 views
7

He estado jugando con las zonas horarias de Joda y encontré lo siguiente que me pareció extraño.Cálculo de la zona horaria de Joda

Me corrió el siguiente código

DateTimeZone gmt = DateTimeZone.forID("Etc/GMT"); 
    DateTimeZone gmtPlusOne = DateTimeZone.forID("Etc/GMT+1"); 
    DateTimeZone gmtMinusOne = DateTimeZone.forID("Etc/GMT-1"); 

    System.out.println(new DateTime(gmt).toString()); 
    System.out.println(new DateTime(gmtPlusOne).toString()); 
    System.out.println(new DateTime(gmtMinusOne).toString()); 

y obtuvo el siguiente resultado

2011-10-24T13:00:12.890Z 
2011-10-24T12:00:12.937-01:00 
2011-10-24T14:00:12.937+01:00 

estaba un poco sorprendido de ver "gmtPlusOne" que sale como una hora de retraso con -01: 00 y el reverso para "gmtMinusOne". ¿Alguien puede explicar por qué estos salen así como hubiera esperado lo contrario?

+2

Don' Te preocupes, Jon estará aquí en cualquier momento ;-) – Voo

Respuesta

15

Esta documentación http://joda-time.sourceforge.net/timezones.html explica el motivo de este comportamiento no tan intuitivo. Dice Etc/GMT+1 tiene un desplazamiento estándar de -1:00 y Etc/GMT-1 tiene un desplazamiento estándar de +1:00. Esta reversión de compensación se cumple para cualquier Etc/GMT+n.

De wiki

El área especial de Etc se utiliza para algunas zonas administrativas, particularmente para "Etc/UTC", que representa la hora coordinada Universal. Para ajustarse al estilo POSIX, los nombres de zona que comiencen con "Etc/GMT" tienen su signo invertido de lo que la mayoría de la gente espera . En este estilo, zonas al oeste de GMT tener un signo positivo y aquellos al este tienen un signo negativo en su nombre (por ejemplo, "Etc/GMT-14" es 14 horas adelante/al este de GMT.)

+0

Apple analiza este problema POSIX en [este archivo de texto] (http://opensource.apple.com/source/system_cmds/system_cmds-230/zic.tproj/datfiles/etcetera) . 'Utilizamos signos de estilo POSIX en los nombres de Zona y las abreviaturas de salida, aunque esto es lo contrario de lo que mucha gente espera. POSIX tiene señales positivas al oeste de Greenwich, pero mucha gente espera señales positivas al este de Greenwich. Por ejemplo, TZ = 'Etc/GMT + 4' utiliza la abreviatura "GMT + 4" y corresponde a 4 horas detrás de UTC (es decir, al oeste de Greenwich) aunque muchas personas esperarían que significara 4 horas antes de UTC (es decir, este de Greenwich) .' –

+0

Estos 'Etc' deberían ser innecesarios. Utilice un [nombre de zona horaria adecuada] (http://en.wikipedia.org/wiki/List_of_tz_database_time_zones), generalmente un continente + barra diagonal + ciudad/región como 'Asia/Kolkata' o' America/Montreal'. –

Cuestiones relacionadas