2010-01-19 16 views
10

"Durante gli anni della" crisi energetica ", il Congresso ha promulgato le date di inizio per l'ora legale.Nel 1974, l'ora legale è iniziata il 6 gennaio e nel 1975 è iniziata il 23 febbraio. Dopo questi due anni la data di inizio è tornata all'ultimo Domenica di aprile. "
(via http://aa.usno.navy.mil/faq/docs/daylight_time.php)Ora legale in Javascript per il 1974?

Sembra che ci sia un bug nell'oggetto date di Javascript per queste date. Se convertite 127627200000 millisecondi ad una data, dovrebbe essere Thu Gen 17 00:00:00 EDT 1974. Questo è corretto su http://www.fileformat.info/tip/java/date2millis.htm, ma non corretto su http://www.esqsoft.com/javascript_examples/date-to-epoch.htm, che dice che converte a Mer Gen 16 1974 23:00:00 GMT -0500 (Eastern Standard Time). Se si crea un nuovo oggetto Date (127627200000) in javascript, si dà la seconda conversione della data. Questo succede in tutti i principali browser.

Non riesco a immaginare che questa è la prima volta questo è stato un problema per chiunque, ma non riesco a trovare altri casi di questo problema con alcune ricerche online. Qualcuno sa se esiste una correzione esistente per questo o una correzione più semplice rispetto al controllo manuale delle date che Javascript ha sbagliato la conversione? Ci sono altre date questo è un problema?

+0

sembra familiare :) – cwash

+2

Ah !! Le gioie della globalizzazione ... Hai pensato che, mentre potrebbe esserci un DST negli Stati Uniti nel 1974, potrebbe non essere il caso in altri paesi? E per avere un uso più ampio possibile (per non parlare di un processo di sviluppo più semplice) JavaScript potrebbe non avere una tabella per tutti i DST disponibili in ogni paese possibile? –

risposta

12

Come sempre, è meglio controllare le specifiche :)

In questo caso, ero piuttosto sconvolto nel vedere questo nella sezione 15.9.1.9 del ECMA-262:

L'attuazione di ECMAScript dovrebbe non provare a determinare se l'ora esatta era soggetta alla luce del giorno risparmio di tempo, ma solo se il tempo di di ora legale sarebbe stato in vigore se l'algoritmo ora legale era stato utilizzato in il tempo. Ciò evita complicazioni come tenendo conto degli anni in cui le impostazioni internazionali hanno rilevato l'ora legale durante tutto l'anno.

In altre parole, un'implementazione ECMAScript conforme è no essere storicamente accurato.

Ora se tutte le implementazioni lo seguono o no, non sono sicuro ... ma suggerisce che avresti bisogno di una sorta di libreria separata se volessi ottenere fusi orari storicamente accurati ... dove "storicamente accurato "Ovviamente non è necessario tornare indietro nel 1974: gli Stati Uniti hanno cambiato il loro programma orario legale nel 2007, e altri paesi lo hanno fatto più recentemente (e con meno avvertimenti).


La prima occorrenza di 15.9.1.9. Per qualche motivo si verifica due volte, una volta per "Regolazione dell'ora legale" e una volta per "Ora locale". Wow.

+0

I fusi orari di Java hanno sorpreso un bel po 'di persone (specialmente quando sono state aggiunte in 1.4).Particolari sorprese sono la differenza di +1 ora per Londra al 1970-01-01 e le seconde seconde per la Grecia, Helsinki nei primi anni '20. –

+1

Le seconde frazioni secondarie sembrano davvero brutte notizie. Penso che avrei persino sostenuto che così poche applicazioni avrebbero davvero * voluto * quel comportamento, potrebbe essere meglio lasciarlo fuori, come il salto di secondi ... –

0

Java fa i fusi orari storici (a circa 1920), JavaScript apparentemente no.

Problemi correlati