2016-05-26 38 views
9

Z documentation:Dlaczego instancje `java.time.ZoneOffset` sortują 'wstecz'?

Przesunięcia porównywane są w kolejności, w jakiej występują one na tej samej porze dnia, na całym świecie. Tak więc przesunięcie o +10: 00 następuje przed przesunięciem o +09: 00 i tak dalej do -18: 00.

Czy ktoś wie, dlaczego są one zamówione w ten sposób? Wydaje się to sprzeczne z intuicją, ponieważ jest przeciwieństwem rzędu wartości liczbowej przesunięcia. Jest to również przeciwieństwo kolejności, w jakiej pojawiłyby się, czytając od lewej do prawej, na mapie GMT/UTC + 0.

(Poza tym: nie rozumiem, dlaczego cytowana dokumentacja odnosi się do "do -18: 00" albo -12: 00 lub -24: 00 Rozumiem Dlaczego -18: 00? wydrukuj przesunięcia wszystkich obsługiwanych stref czasowych java.time.ZoneId w zakresie od -11: 00 do +12: 00.)

AKTUALIZACJA: Odpowiedź na bok. Z innych źródeł tej samej dokumentacji:

W 2008 r. Przesunięcia stref czasowych na całym świecie wydłużono z -12: 00 do +14: 00. Aby zapobiec problemom z rozszerzaniem tego zakresu, ale nadal zapewniać walidację, zakres przesunięć jest ograniczony do -18: 00 do 18:00 włącznie.

Odpowiedz

6

Wyobraź sobie, że masz listę zlokalizowanych data/czas, ze skojarzoną strefy czasowej, kiedy jakieś wydarzenie miało miejsce:

(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) 

można przekształcić je w momentach w jednej strefie czasowej, powiedzieć 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 

i teraz sortować je w porządku "który się pierwszy":

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

Zatem czas australijski (1) występuje przed czasem japońskim (3), czyli przed czasem brytyjskim (2).

To właśnie stosując ten sam porządek w strefach czasowych: jako cytat mówi:

Przesunięcia porównywane są w kolejności, w jakiej występują one na tej samej porze dnia, na całym świecie

Tak więc australijski czas wschodni standardowy jest uważany za "przed" standardowym czasem Japonii, który jest uważany za "przed" czasem środkowym Greenwich.

+0

Oczywiście innym sposobem sprawdzenia, dlaczego jest "wstecz", jest to, że światło dzienne "cofa się" również na całej mapie świata (http://www.yellowpagesoftheworld.com/world/world-map.htm)! –

+0

Bardzo dobrze napisana odpowiedź. Dodam jeszcze jeden sposób, żeby o tym pomyśleć: nowy dzień wschodzi wcześniej na wschodzie (rotacja Ziemi). Na przykład giełdy w Tokio otwierają się przed rynkami londyńskimi, a rynki londyńskie otwierają się przed rynkami nowojorskimi, które otwierają się przed rynkami w Chicago. W standardzie ISO 8601 używanym przez java.time, używamy znaku plusa do reprezentowania stref, które wyprzedzają UTC (inni gracze czasu użyli przy okazji Minusa). Jeśli chodzi o od lewej do prawej, dotyczy to tylko języków "l-to-r" i "North-on-top". Umieść na górze South lub naucz się języka arabskiego, aby mapa była chronologicznie wyświetlana. –