2016-05-26 19 views
9

Dal documentation:Perché le istanze di `java.time.ZoneOffset` sono ordinate 'all'indietro'?

Gli offset vengono confrontati nell'ordine in cui si verificano per la stessa ora del giorno in tutto il mondo. Pertanto, un offset di +10: 00 viene prima di un offset di +09: 00 e così via fino a -18: 00.

Qualcuno sa il motivo per cui sono ordinati in questo modo? Sembra contro-intuitivo in quanto è l'opposto dell'ordine del valore numerico dell'offset. È anche l'opposto dell'ordine in cui appariranno, leggendo da sinistra a destra, su una mappa centrata GMT/UTC + 0.

(A parte: non capisco perché la documentazione citata si riferisca a "fino a -18: 00" o -12: 00 o -24: 00 capisco Perchè -18: 00? Se stampare gli offset di tutti i fusi orari supportati di java.time.ZoneId da -11: 00 a +12: 00.)

AGGIORNAMENTO: Una risposta a parte mia. Da altrove nella stessa documentazione:

Nel 2008, le correzioni di fuso orario in tutto il mondo sono passate da -12: 00 a +14: 00. Per evitare problemi di estensione di tale intervallo, pur continuando a fornire la convalida, l'intervallo di offset è limitato a -18: 00-18:00 inclusi.

risposta

6

Immaginate che hai un elenco di date/orari localizzate, con il fuso orario associato, di quando qualche evento si è verificato:

(1) 2016/05/26 00:00:00 in Australian Eastern Standard Time (UTC+10) 
(2) 2016/05/26 00:00:00 in Greenwich Mean Time (UTC+0) 
(3) 2016/05/26 00:00:00 in Japan Standard Time (UTC+9) 

è possibile convertire questi in istanti in un unico fuso orario, dicono GMT:

(1) 2016/05/25 14:00:00 GMT 
(2) 2016/05/26 00:00:00 GMT 
(3) 2016/05/25 15:00:00 GMT 

ed ora ordinarli in ordine di "che è accaduto prima":

(1) 2016/05/25 14:00:00 GMT 
(3) 2016/05/25 15:00:00 GMT 
(2) 2016/05/26 00:00:00 GMT 

Quindi l'ora australiana (1) è precedente all'ora giapponese (3), che precede l'ora britannica (2).

è solo applicando lo stesso per i fusi orari: come la citazione dice:

Gli offset vengono confrontati nell'ordine in cui si verificano per la stessa ora del giorno in tutto il mondo

Quindi il tempo standard dell'Australia orientale è considerato "prima" del tempo standard del Giappone, che è considerato "prima" del tempo medio di Greenwich.

+0

Ovviamente, un altro modo per capire perché è "a ritroso" è che] la luce del giorno va "all'indietro" anche attraverso la mappa del mondo] (http://www.yellowpagesoftheworld.com/world/world-map.htm)! –

+0

Risposta molto ben scritta. Aggiungerò un altro modo per pensarci: un nuovo giorno sorge prima verso est (rotazione terrestre). Ad esempio, i mercati azionari di Tokyo si aprono prima dei mercati di Londra, i mercati di Londra si aprono davanti ai mercati di New York che si aprono prima dei mercati di Chicago. Nello standard ISO 8601 utilizzato da java.time, utilizziamo un segno più per rappresentare le zone che sono in anticipo rispetto all'ora UTC (altri time-keeper hanno usato un segno meno, a proposito). Per quanto riguarda sinistra-a-destra, è così solo per le lingue da l a r e le mappe North-on-top. Metti il ​​Sud in cima, o impara l'arabo, per leggere una mappa in ordine cronologico. –

Problemi correlati