2010-01-19 12 views
10

"Durante los años de la" crisis energética ", el Congreso promulgó fechas de inicio más tempranas para el horario diurno. En 1974, el horario de verano comenzó el 6 de enero y en 1975 el 23 de febrero. Después de esos dos años, la fecha de inicio volvió al último. Domingo de abril. "
(a través de http://aa.usno.navy.mil/faq/docs/daylight_time.php)horario de verano en Javascript para 1974?

Parece haber un error en el objeto de fecha de Javascript para estas fechas. Si convierte 127627200000 milisegundos en una fecha, debería ser el 17 de enero de 00:00:00 EDT de 1974. Esto es correcto en http://www.fileformat.info/tip/java/date2millis.htm, pero incorrecto en http://www.esqsoft.com/javascript_examples/date-to-epoch.htm, que dice que se convierte en Wed Jan 16 1974 23:00:00 GMT -0500 (hora estándar del este). Si crea un nuevo objeto Fecha (127627200000) en javascript, le da la última conversión de fecha. Esto sucede en todos los navegadores principales.

No me puedo imaginar que esta sea la primera vez que esto ha sido un problema para nadie, pero no puedo encontrar ningún otro caso de este problema con algunas búsquedas en línea. ¿Alguien sabe si existe una solución para esto o una solución más sencilla que la comprobación manual de las fechas? ¿Tiene la conversión incorrecta? ¿Hay otras fechas esto es un problema?

+0

parece familiar :) – cwash

+2

Ah !! Las alegrías de la globalización ... ¿Consideró que si bien puede haber un horario de verano en los Estados Unidos en 1974, puede no ser el caso en otros países? Y para tener el uso más amplio posible (sin mencionar un proceso de desarrollo más sencillo), es posible que JavaScript no tenga una tabla para todos los DST disponibles en todos los países posibles. –

Respuesta

12

Como siempre, lo mejor es consultar la especificación :)

En este caso, yo estaba muy sorprendido de ver esto en la sección 15.9.1.9 de ECMA-262:

La implementación de ECMAScript debe no intente determinar si la hora exacta estuvo sujeta a la luz del día , ahorrando tiempo, pero si el horario de verano hubiera estado vigente si se hubiera utilizado el algoritmo de horario de verano actual en el tiempo. Esto evita complicaciones como teniendo en cuenta los años que la localidad observó el horario de verano durante todo el año.

En otras palabras, una implementación de ECMAScript conformes se no pueden ser históricamente exacto.

Ahora bien, si todas las implementaciones siguen esto o no, no estoy seguro ... pero sugiere que necesitarías algún tipo de biblioteca por separado si quisieras obtener zonas horarias históricamente precisas ... donde "históricamente precisa" "no tiene que ser casi tan atrás como 1974, por supuesto: los EE. UU. cambiaron su horario de horario de verano en 2007, y otros países lo han hecho más recientemente que eso (y con menos advertencia).


la primera aparición de 15.9.1.9. Por alguna razón, ocurre dos veces: una para "Ajuste del horario de verano" y una para "Hora local". Guau.

+0

Las zonas horarias históricas de Java han sorprendido a muchas personas (especialmente cuando se agregaron en 1.4).Sorpresas particulares son la compensación de +1 horas para Londres en 1970-01-01 y las segundas compensaciones fraccionales para Grecia, Helsinki en la década de 1920. –

+1

Las segundas compensaciones fraccionarias realmente parecen malas noticias. Creo que incluso argumentaría que muy pocas aplicaciones realmente querrían * ese comportamiento, sería mejor dejarlo fuera, como segundos interminables ... –

0

Java tiene zonas horarias históricas (alrededor de 1920), JavaScript aparentemente no.

Cuestiones relacionadas