2016-05-26 20 views
9

Vom documentation:Warum `java.time.ZoneOffset` Instanzen sortieren‚rückwärts‘?

Die Verschiebungen in der Reihenfolge verglichen werden, dass sie für die gleiche Tageszeit auf der ganzen Welt auftreten. So kommt ein Offset von +10: 00 vor einem Offset von +09: 00 und so weiter bis zu -18: 00.

Kennt jemand den Grund, warum sie auf diese Weise bestellt werden? Es scheint kontraintuitiv zu sein, da es das Gegenteil der Reihenfolge des numerischen Werts des Offsets ist. Es ist auch das Gegenteil der Reihenfolge, in der sie von links nach rechts auf einer GMT/UTC + 0-zentrierten Karte erscheinen würden.

(abgesehen: Ich verstehe nicht, warum die zitierte Dokumentation bezieht sich auf „bis zu -18: 00“ entweder -12:. 00 oder -24. 00 Ich würde verstehen, warum -18: 00 Wenn Sie Drucken Sie die Offsets aller unterstützten java.time.ZoneId Zeitzonen aus, die von -11: 00 bis +12: 00 reichen.)

UPDATE: Eine Antwort auf meine Seite. Von woanders in der gleichen Dokumentation:

Im Jahr 2008 verlängert Zeitzone Offsets auf der ganzen Welt von -12: 00 bis +14: 00. Um zu verhindern, dass Probleme mit diesem Bereich erweitert werden und dennoch eine Validierung erfolgt, ist der Bereich der Offsets auf -18: 00 bis einschließlich 18:00 beschränkt.

Antwort

6

Stellen Sie sich eine Liste von lokalisierten Datum/Zeit haben, mit der zugehörigen Zeitzone, wann ein Ereignis aufgetreten:

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

Sie diese in Punkte in einer einzigen Zeitzone umwandeln kann, sagen 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 

und sortieren sie nun in der Reihenfolge "die geschah zuerst":

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

So die australische Zeit (1) vor der japanischen Zeit (3), die vor der britischen Zeit ist (2).

Es ist einfach in der gleichen Reihenfolge auf die Zeitzonen Anwendung: wie das Zitat sagt:

Die Verschiebungen in der Reihenfolge verglichen werden, dass sie für die gleiche Tageszeit auf der ganzen Welt

auftreten

So Australian Eastern Standard Time gilt als "vor" Japan Standardzeit, die "vor" Greenwich Mean Time betrachtet wird.

+0

Natürlich eine andere Art und Weise zu sehen, warum es „rückwärts“ ist, dass] Tageslicht „rückwärts“ auf der Weltkarte zu] (http://www.yellowpagesoftheworld.com/world/world-map.htm) geht! –

+0

Sehr gut geschriebene Antwort. Ich füge noch eine weitere Denkweise hinzu: Ein neuer Tag dämmert früher im Osten (Erdrotation). Zum Beispiel öffnen die Tokioter Aktienmärkte vor den Londoner Märkten, die Londoner Märkte öffnen sich vor den New Yorker Märkten, die sich vor den Chicagoer Märkten öffnen. In ISO 8601 Norm, die von java.time verwendet, verwenden wir ein Plus-Zeichen Zonen darzustellen, die vor der UTC sind (andere Zeitnehmer verwendet haben ein Minus, übrigens). Wie für links-nach-rechts, das ist so nur für l-to-r-Sprachen und North-on-top-Karten. Setzen Sie Süden oben, oder lernen Sie Arabisch, für eine Karte, um chronologisch zu lesen. –