- Zeitzonen sind komplex, aber weil Computer sie implementieren müssen, sind sie nur innerhalb eines endlichen Rahmens seltsam.
Asia/Kathmanduhat einen ungewöhnlichen Offset zu UTC.Africa/Casablancapasst nicht gut in das Zeitzonenmodell und wird deshalb hartkodiert.America/Nuukbeginnt die Sommerzeit bei -01:00.Africa/CairoundAmerica/Santiagobeginnen die Sommerzeit um 24 Uhr (nicht um 0 Uhr).Australia/Lord_Howehat die seltsamsten Sommerzeitregeln.
PGXIIREAM: Papst Gregor XIII. beherrscht alles
- Der größte Teil der Welt verwendet ein Zeitsystem auf Basis des gregorianischen Kalenders.
- Der gregorianische Kalender ist sehr nützlich, um die Position der Sonne im Jahresverlauf konstant zu halten.
- UTC ist die moderne formale Ausprägung des gregorianischen Kalenders, und die ganze Welt richtet ihre Zeit danach aus.
Schaltsekunden sind nicht wichtig
- Die Erdrotation verlangsamt sich, daher werden Schaltsekunden hinzugefügt, um das zu korrigieren.
- Schaltsekunden kann man ignorieren, weil Programmiersprachen keine 61 Sekunden darstellen.
- Cloud-Anbieter lösen das Problem, indem sie ihre Uhren während einer Schaltsekunde langsamer laufen lassen.
Seltsame Zeitzonen
Asia/Kathmandu hat einen ungewöhnlichen Offset
- Nepal liegt 5 Stunden und 45 Minuten vor UTC.
- Computer kennen diese Information über die IANA-Zeitzonendatenbank.
Zeichenketten wie PDT oder CET bedeuten nichts
- Zeitzonenkennungen können mehrdeutig sein, und viele Zeitzonen teilen sich dieselbe Kennung.
Wie werden Zeitzonen mit Sommerzeit dargestellt?
- Die Regeln für die Umstellung auf Sommerzeit sind komplex, und Computer berechnen auf ihrer Grundlage die lokale Zeit.
Africa/Casablanca und Asia/Gaza folgen dem Mond, aber Zeitzonen folgen der Sonne
- Marokko und Gaza passen ihre Sommerzeit an den Ramadan an; das wird hartkodiert.
America/Nuuk wechselt bei -1 Uhr in die Sommerzeit
- Grönland beginnt die Sommerzeit zum selben Zeitpunkt wie Europa, aber in der Ortszeit beginnt sie um -1 Uhr.
America/Santiago und Africa/Cairo wechseln um 24 Uhr
- Diese Zeitzonen wechseln um 24 Uhr in die Sommerzeit, was bedeutet, dass der nächste Tag beginnt.
Australia/Lord_Howe hat die seltsamste Sommerzeitumstellung
- Lord-Howe-Insel hat eine Sommerzeitumstellung um 30 Minuten.
Zusammenfassung von GN⁺
- Zeitzonen sind komplex, aber weil Computer sie implementieren müssen, sind sie nur innerhalb eines endlichen Rahmens seltsam.
Australia/Lord_Howeist mit seiner Sommerzeitumstellung um 30 Minuten die ungewöhnlichste Zeitzone.- Dieser Artikel ist nützlich, um die Komplexität von Zeitzonen zu verstehen, und könnte für Programmierer interessant sein.
- Ein Projekt mit ähnlicher Funktionalität ist
tzdb.
1 Kommentare
Hacker-News-Kommentare
Das Interessanteste an der tz-Datenbank ist, dass sie eine Schätzung für den Zeitpunkt des Urknalls enthält und so ausgelegt ist, dass Zeitzonenwechsel vor dem Urknall nicht berechnet werden
Auch die Commit-Message von https://github.com/eggert/tz/commit/b22d459a367f4d01b10f6f6b... ging sinngemäß darum: „Zeitstempel vor dem Urknall sind physikalisch fragwürdig, also sollten wir sie nicht erzeugen“, und kurz darauf wurden in einem separaten Commit auch Schaltsekunden vor dem Urknall verboten
dateMit Beispielen etwa aus dem 15. Jahrhundert und Geschichten darüber, dass ein König eine bestimmte Woche/einen bestimmten Monat mochte und anordnete, sie/ihn zu wiederholen, oder dass ein anderer König eine bestimmte Woche nicht mochte und sie aus dem Kalender strich. Das war eine ziemlich erhellende Lektüre, aber ich kann sie heute nicht mehr finden
Anders gesagt läuft es auf die Schlussfolgerung hinaus: „Zeitpunkte vor dem Urknall liegen außerhalb des Geltungsbereichs dieser Library; wenn ein Algorithmus also nur vor dem Urknall falsche Werte liefert, ist dieser Algorithmus akzeptabel und muss nicht verbessert/ersetzt werden.“
Der Nutzen im Verhältnis zu möglichen Bugs erscheint mir dort nicht besonders groß, und der Großteil der unordentlichen Komplexität von tzdb steckt in
zic. Manchmal habe ich das Gefühl, es wäre besser gewesen, wennzickein Artefakt wäre, auf das sich andere verlassen könnenHoffentlich verschwinden Zeitzonen selbst, bevor die Zeitzonentheorie veraltet
Die seltsamste Zeitzone ist meiner Meinung nach Africa/Addis_Ababa. Gerade die Menschen vor Ort in Äthiopien verwenden dieses System nicht
Lokal wird die Uhrzeit um 6 Stunden verschoben: Der AM-Zyklus beginnt im Morgengrauen, also um 6 Uhr morgens, und der PM-Zyklus beginnt bei Sonnenuntergang, also um 18 Uhr
https://en.wikipedia.org/wiki/Time_in_Ethiopia
Entsprechend endet der Tag um 18 Uhr, thenashara. Intuitiv ergibt das viel mehr Sinn als die Uhr im englischsprachigen Raum, und da es in der Sprache verankert ist, kommt es nur selten zu Zeitverwechslungen
https://en.wikipedia.org/wiki/Ethiopian_calendar
Der äthiopische Kalender besteht aus 12 Monaten mit je 30 Tagen sowie 5 oder 6 Schalttagen, die den 13. Monat bilden
https://en.wikipedia.org/wiki/Roman_timekeeping
Im englischsprachigen Raum begann früher das neue Jahr ebenfalls am 25. März: https://en.wikipedia.org/wiki/Calendar_(New_Style)_Act_1750#...
Beides ist technisch gesehen nichts, womit tzdb umgehen kann. tzdb behandelt bürgerliche Zeit, nicht Kalender oder andere Rechensysteme
Die Seltsamkeit von
Asia/Jerusalemliegt daran, dass die Sommerzeit stark mit Fragen der Trennung von Religion und Staat verknüpft ist. Religiöse Menschen möchten, dass der Arbeitstag passend zu Feiertagen liegt, die bei Sonnenuntergang beginnenDeshalb war die Sommerzeit über Jahrzehnte bis Mitte der 2000er jedes Jahr das Ergebnis von Verhandlungen zwischen religiösen und säkularen Parteien, und die Umstellungstermine wurden oft erst kurz vor der Umstellung festgelegt, was häufig Probleme verursachte
Offenbar gibt es noch immer eine Ausnahme, die verhindert, dass die Sommerzeit an Rosh HaShanah endet, weshalb die zukünftigen Regeln wohl kompliziert aussehen
Wenn die EU es am Ende schafft, sie abzuschaffen, könnte man vielleicht nachziehen
Deshalb will man nicht, dass die Sommerzeit eine ohnehin spät endende Veranstaltung noch später macht. Außerdem wollte man, dass am Fastentag Jom Kippur das Fasten eine Stunde früher endet. Der Versuch, sich nach diesen Daten zu richten, machte die Sommerzeitperiode zu kurz, sodass Verhandlungen nötig wurden
Die Aussage, „Programmiersprachen können keine 61 Sekunden lange Minute darstellen“, stimmt so nicht. Jemand hat bereits erwähnt, dass Raku Schaltsekunden unterstützt, und das könnte teilweise meine Schuld sein
Denn
DateTime.pm, die populärste Datums-/Zeitbibliothek in Perl 5, unterstützt Schaltsekunden, und ich habe diese Unterstützung beim Erstellen vonDateTime.pmimplementiertRückblickend war das ziemlich sicher ein Fehler. Für Schaltsekunden interessieren sich kaum Leute, und sie erzeugen nur merkwürdige Verwirrung wie: „Warum ist 60 Sekunden addieren manchmal nicht dasselbe wie 1 Minute addieren?“
Besonders weil versucht wurde zu validieren, ob
second => 60gültig ist, wurde der Code deutlich komplexer. Der Konstruktor nimmt Zeitkomponenten und eine beliebige Zeitzone entgegen; um die Schaltsekundentabelle zu prüfen, muss man also nach UTC konvertieren, aber genau diese Konvertierung ist aus historischen Gründen selbst mit Werten verknüpft, die Schaltsekunden enthaltenFür einen winzigen Nutzen wurde daraus ein riesiges Durcheinander, und da Rakus Standardbibliothek für Datum/Zeit offenbar stark von Perl 5s
DateTime.pmübernommen hat, hat sie meiner Ansicht nach einige derselben schlechten Designentscheidungen geerbtIch frage mich, wie der ursprüngliche Denkprozess war. War man zu sehr in das Problem vertieft? Wenn man einem Problem zu nah ist und sich zu lange darauf konzentriert, passiert so etwas leicht, weil die Freude daran, etwas zu reparieren, bevor es kaputtgeht, überwiegt
Sie ist sinngemäß definiert als: „Ein Instant ist ein bestimmter Zeitpunkt, gemessen in atomaren Sekunden und deren Bruchteilen, und ist an keine Epoche gebunden bzw. sich keiner bewusst“
Anfang dieses Jahres musste ich eine Funktion schreiben, die bei einer gegebenen US-Adresse die aktuelle lokale Uhrzeit ermittelt. Der naive Ansatz wäre, Bundesstaaten statisch auf Zeitzonen abzubilden, aber es gibt etliche Ausnahmen, die das verhindern
In der betreffenden Anwendung waren Kosten und Geschwindigkeit wichtig, also kaufte ich für ein paar Dollar eine CSV, die alle US-ZIP Codes auf UTC-Offset, Einhaltung der Sommerzeit und Ähnliches abbildet
Da
pytzIANA-Zeitzonennamen erwartet, musste ich Offset- und Sommerzeitinformationen am Ende manuell auf bestimmte Zeitzonen mappen, und wegen US-Außengebieten und Militärbasen waren auch seltsame Semantiken wie beiEtc-Zeitzonen nötig[1] https://en.wikipedia.org/wiki/Tz_database#Area
ZIP Codes können vermutlich ausreichen, aber man muss vorsichtig sein. Wenn es nicht zu viele Adressen sind, ist ein robusterer Ansatz, per Reverse Geocoding zu arbeiten und dann mit einer Bibliothek aus den Zeitzonen-Grenzpolygonen den IANA-Identifier zu ermitteln
https://github.com/RomanIakovlev/timeshape wird von einem ehemaligen Kollegen gepflegt; wir konnten einen Teil der internen Arbeit als Open Source veröffentlichen
Ein oder zwei Systeme stempelten die Daten mit lokaler Zeit, die übrigen verwendeten UTC. Um einen Algorithmus für den Umgang mit der Sommerzeit zu erstellen, kaufte ich einen alten Farmers' Almanac, las die Regeln und verzweifelte
Im Kalender standen nominelle Regeln für die Umstellung, aber auch eine Fußnote, dass sie wegen Eingriffen des Kongresses von Jahr zu Jahr angepasst worden waren und das wohl auch weiterhin würden. Ich sagte meinem Chef: „Wenn ich einen Algorithmus schreiben könnte, der künftige Abstimmungen des Kongresses vorhersagt, wäre ich Milliardär und hätte diesen Ingenieursjob gekündigt“
Am Ende habe ich wohl die jüngsten bekannten Umstellungen und die künftigen nominellen Regeln codiert. Das war, bevor alle vernetzt waren, und der Code lief auf Standalone-Rechnern wie VAX-Systemen, also gab es kaum andere Möglichkeiten
Auch das Zusammenführen von drei Tracking-Datenquellen, jeweils mit eigenem Gültigkeits- und Messqualitäts-Degradationsstatus, war ein Albtraum, aber immer noch einfacher, als künftiges Handeln des Kongresses vorherzusagen
US/Easternabzubilden. Wenn man danach einen UTC-Offset braucht, wendet man mitpytzdie Zeitzone auf das jeweilige Datum an und erhält den OffsetBenannte Zeitzonen sind insofern besonders, als sie stabil sind. UTC-Offset-Zeitzonen wie
-05:00oder Abkürzungen wieESTsind wegen der Sommerzeit an einem bestimmten Ort über die Zeit hinweg nicht stabilWenn man jemanden nach seiner Zeitzone fragt und als Optionen Offsets oder Abkürzungen anbietet, stiftet das bei allen Verwirrung
Für die Umwandlung Breiten-/Längengrad → Zeitzone habe ich diese Python-Bibliothek verwendet: https://github.com/jannikmi/timezonefinder
Auch die Datenquelle sah nach einer recht hochwertigen Quelle aus: https://github.com/evansiroky/timezone-boundary-builder/rele...
Etc-Identifiern muss man wirklich vorsichtig sein. Besonders dann, wenn man alle Identifier unverändert den Nutzern anzeigen wollteIn der betreffenden Datei steht der Kommentar: „POSIX setzt Werte westlich von Greenwich positiv, aber viele Menschen erwarten Werte östlich von Greenwich als positiv. Zum Beispiel verwendet
TZ='Etc/GMT+4'die Abkürzung-04und bedeutet 4 Stunden hinter UT, also westlich von Greenwich, aber viele Menschen erwarten 4 Stunden vor UT, also östlich davon“Auch die Zeitzone Palästinas ist ziemlich merkwürdig
https://en.wikipedia.org/wiki/Time_in_the_State_of_Palestine
Es gibt zwar Sommerzeit, aber die Daten sind nicht festgelegt; die Regierung gibt jedes Jahr Beginn und Ende bekannt. Manchmal geschieht das weniger als eine Woche vorher, was zwangsläufig allerlei interessante Probleme verursacht.
Die Start- und Enddaten der Sommerzeit in Israel und Palästina sind nicht zwingend identisch
Eine Sommerzeit mit 30 Minuten statt 1 Stunde Unterschied als „merkwürdigste Zeitzone“ zu bezeichnen, setzt die Messlatte meiner Meinung nach zu niedrig
Fast alles andere ist merkwürdiger. Antarctica/Troll klingt definitiv seltsamer, und die Zeitzonen von Marokko und Gaza haben zumindest eine andere Art von Regeln, weil sie sich mit den bestehenden Systemen kaum ausdrücken lassen. Auch die Zeitzonen auf Apples Sperrliste, bei denen die Umstellung am Tag vor einem bestimmten Datum erfolgt, sind seltsam genug, um Dinge kaputtzumachen
Bei Schaltsekunden stimme ich zu. Das ist weniger nützliches Wissen für Programmierer als vielmehr Trivia. Computer verschmieren Schaltsekunden, und man weiß nicht einmal, wann sie passiert sind. Man kann sie völlig vergessen
Allerdings haben Länder einmal von einer Praxis, Schaltsekunden zu ignorieren, zu einer Praxis gewechselt, sie zu berücksichtigen; die Umstellung Australiens von
GMT+xaufUTC+xvor einigen Jahrzehnten war also ein Übergang vom Ignorieren zum Einbeziehen von Schaltsekunden. Dass diese Tatsache nahezu allgemein ignoriert wird, ist vielleicht sogar besser soAber es ist immer ein bisschen lustig, wenn eine große Organisation sagt: „Unsere Server haben dank GPS-Synchronisierung und selbst entwickelten PCIe-Rubidium-Atomuhrkarten eine Zeitgenauigkeit unter einer Millisekunde“, und gleichzeitig: „Schaltsekunden werden über einen Tag verschmiert, also ist es praktisch egal, wenn die Serverzeit um ±0,5 Sekunden danebenliegt“
[1] https://engineering.fb.com/2021/08/11/open-source/time-appli...
[2] https://engineering.fb.com/2020/03/18/production-engineering...
Wenn der Himmel zum Beispiel sehr bewölkt ist, kann man den Mond nicht sehen, egal wo er steht. Das verursacht Probleme, wenn man einen Kalender für den Staatsbetrieb implementiert
Viele Länder, die den islamischen Kalender offiziell verwenden, nutzen im Voraus berechnete Näherungsdaten auf Basis der erwarteten Sichtbarkeit an einem bestimmten Ort. Der islamische Kalender ist daher eigentlich nicht einer, sondern eher zwei: ein beobachtungsbasierter islamischer Kalender und ein vorhergesagter Kalender; beide hängen vom Ort der tatsächlichen oder vorhergesagten Beobachtung ab
Ich weiß nicht, wie Marokko oder Gaza das handhaben
Nur verwendet die norwegische Zeit eben zufällig Sommerzeit
Viele Märkte waren während Schaltsekunden geschlossen, und viele Banken setzen bei lokalen Zeitumstellungen weiterhin alle Transaktionen aus, um das Fehlerrisiko zu verringern
Selbst in Anwendungen, in denen man sich nicht besonders darum kümmert, gab es überraschend viele Bugs im Zusammenhang mit Schaltsekunden, und es gibt gute Gründe dafür, dass die CGPM die Abschaffung von Schaltsekunden beschlossen hat
https://en.wikipedia.org/wiki/Leap_second#Other_reported_sof...
Ein großartiger Artikel über die Akrobatik von Zeitzonen-Software. Wirklich ziemlich flexibel
Wenn alles automatisierte, endliche Offsets sind, gibt es keinen Grund, warum Sommerzeit-Regeln unbedingt auf 60-Minuten-Anpassungen zugeschnitten sein müssen.
Könnte sich nicht irgendein Land dafür entscheiden, das ganze Jahr über kontinuierlich veränderliche Offsets zu verwenden? Die Offset-Lookup-Tabelle würde deutlich länger, aber so ließe sich die Sommerzeit vielleicht „lösen“. Da ständig nur ein wenig nachjustiert würde, würde man es wie bei Schaltsekunden kaum bemerken.
Menschen, die auf analoge Uhren angewiesen sind, würden sie vielleicht nicht mehr jedes Mal in dieselbe Richtung stellen.
Eine Änderung um 10 Minuten einmal im Monat ist viel leichter zu verkraften und fällt kaum auf; selbst wenn man sie verpasst, ist es nicht so schlimm wie eine Abweichung um eine Stunde.
Man schafft die Sommerzeit ab. Persönlich bevorzuge ich dauerhafte Standardzeit gegenüber dauerhafter Sommerzeit, aber ich könnte damit leben, solange wir nur aufhören, zweimal im Jahr die Uhren umzustellen.
China ist natürlich bekannt dafür, trotz seiner enormen Breite nur eine einzige Zeitzone zu haben, was sowohl intern als auch extern interessante Situationen schafft.
Eine wirklich wichtige Annahme, die im TZif-Datenformat nicht ausdrücklich sichtbar ist, lautet: Beim Übergang von lokaler Zeit zu UTC-Zeit gibt es höchstens zwei Möglichkeiten.
Viel Software stützt sich auf diese Annahme; zum Beispiel gibt es in
java.time.LocalDateTimewithLaterOffsetAtOverlap(): https://docs.oracle.com/javase/8/docs/api/?java/time/LocalDa...Das setzt implizit voraus, dass es, wenn unklar ist, was 2:30 Uhr bedeutet, nur zwei mögliche Lösungen gibt: vor und nach der Sommerzeitumstellung. Wenn eine Zeitzone um 2:00 Uhr einmal zurückstellt und um 2:15 Uhr noch einmal, sodass drei oder mehr Lösungen entstehen, können viele Dinge das nicht darstellen.
Was mir an der tz-Datenbank gefällt: Technisch gesehen ist sie ein Diff des Diffs.
Sie speichert, wie sich die Differenz zwischen jeder Zeitzone und UTC historisch verändert hat, man kann sie also als
diff^2betrachten. Aber die tz-Datenbank erhält außerdem Updates, also sind diese Commits ein Diff des Diffs des Diffs, alsodiff^3.Man kann noch weiter gehen. Es gibt ein Änderungsprotokoll, und dieses Änderungsprotokoll liegt in git; damit ist ein Commit am tz-Änderungsprotokoll eine Änderung an der Änderungsliste der Änderungsliste der Änderungsliste relativ zu UTC, also
diff^4.Ich denke, der entscheidende Frame ist: Fast jedes Datum/jede Uhrzeit ist in Wirklichkeit eine überwachte Menge von Matching-Regeln.
Man kann schätzen, wie viele Sekunden es dauern wird, bis ein Match ausgelöst wird, aber völlig sicher kann man erst sein, wenn es tatsächlich passiert; und in manchen Fällen passiert es vielleicht gar nicht exakt.
Die andere Hälfte besteht dann darin, die Delta-Schätzung „es passiert vermutlich in X Sekunden ab jetzt“ wieder zurückzuübersetzen in „zu diesem Zeitpunkt wird die Uhr in deiner Zeitzone vermutlich Y anzeigen“.
Man darf nicht vergessen, laufend nachzuverfolgen, welche Zeitzone das Ereignis steuert und in welcher Zeitzone es angezeigt wird.
[1] UTC-Schätzungen können um Schaltsekunden nach vorn oder hinten danebenliegen. TAI ist sicherer, aber auch das könnte sich ändern, falls jemand etwas Interessantes und Neues entdeckt, das das Verhalten von Cäsiumatomen verändert.
[0] Zum Beispiel könnte ein Staat verschwinden und damit auch seine Zeitzone. Oder eine Uhr könnte von 1:00 auf 2:00 springen, sodass wegen der ausgelassenen Stunde der Zeitraum von 1:30 bis 2:00 nie exakt eintritt.