Programmieren mit Zeit und Zeitzonen? Don’t do it!

Frei übersetzt nach diesem Video ein lustiger Beitrag warum man sich als Programmierer das Rechnen mit Zeitzonen sparen sollte.

Wenn Übersetzungsfehler drin sind -> Schreibt einen Kommentar oder eine Mail bitte!

Früher oder später muss jeder Programmierer mit Zeitzonen arbeiten.

Stell dir vor du hast eine Applikation die dich berechnen lässt wieviele Sekunden ein Zeitpunkt in der Vergangenheit her ist.
Du gibst ein Datum mit Uhrzeit ein und bekommst die Anzahl in Sekunden.
Ganz einfach also!

Dann kommen die Zeitzonen. Wenn du sie nur ändern musst z.B. jetzt in New York und vor 5 Tagen in London dann geht das noch ganz gut.
Du lässt den User die Zeitzone eintippen und berechnest den Unterschied abhängig von der Zeitzone.
Nicht sonderlich kompliziert möchte man meinen.

Doch dann wird deine Anwendung populärer und immer mehr Leute nutzen sie...

Plötzlich bekommst du einen Anruf aus Australien:
"Hello, by the way: We're 9 1/2 hours ahead of Greenwich".
9 1/2 Stunden vor Greenwich? Na gut, du baust also halbe Stunden ein für deine Zeitzonen.

Danach ruft jemand aus Nepal an:
"Hello, we're 5 1/4 hours ahead of Greenwhich".
Also baust du auch Viertelstunden Unterschiede mit ein in deine Liste der Zeitzonen, das ist auch okay.

Nun ist es Herbst und plötzlich ruft England an:
"Our calculation is off by one hour, whats wrong?"

Du schaust deinen Programmcode an doch die Winterzeit Umstellung hast du drin, es müsste also alles stimmen.
Darauf der Brite: "Sorry, but our Daylight Saving Time ends one week earlier than on the rest of the world."
Also baust du in dein Programm ein dass jedes Land seine Sommerzeit zu anderen Zeiten umstellen kann. Kein Problem!

Nun ruft jemand von der Südhalbkugel an: "Ähhh, we're not shifting forward in autum, we're shift back. Our Spring is in November"
Na klar, die Südhalbkugel der Erde stellt die Zeit nicht vor im Herbst, sondern zurück. Klar!

Anruf von Samoa: 
"Sorry, but we skipped a day." "WHAT?" "Yeah, we went from 29.12.2011 to 31.12.2011".
"We shifted from one side of the date line (being hours behind of Greenwich) to the other side (being hours ahead of Greenwich, that helps us trading with Australia"

Länder ändern also ihre Zeitzonen dann und wann, na gut du baust also eine Datei die dir sagt wann immer ein Land seine Zeitzone ändert.
Es zeigt sich... das passiert ziemlich oft, aber es wird vorher angekündigt!
Du musst also nur diese Datei mit ausliefern zu deinem Programm und sie immer aktuell halten.

Dann fällt dir auf dass in der Vergangenheit zwischen 1940 und 1945 England die doppelte Sommerzeit (GMT+2) hatte.
England war also zwei Stunden vor Greenwich. Obowhl Greenwich in England liegt!

Also schreibst du dich ein für eine Liste die dir immer mitteilt wenn Länder ihre Zeitzone ändern!
Das passiert ziemlich oft. Oft mehrmals im Jahr.

Plötzlich kommt ein Anruf von Libien: "Sorry, in 2014 we decided to cancel daylight saving time, with only a couple of days notice time before".
Na klar, plötzlich keine Sommerzeit mehr für Libien. Eingebaut!

Dann ruft plötzlich das Westjordanland an: "Ummm, the israelien population has not the same time zone as the palastian population! Because one part follows israel, the other part does not!"
Also hast du eben noch ein paar Leute am selben Ort die unterschiedlichen Zeitzonen folgen je nachdem wo und wer sie sind.
Doof dass du nie dran gedacht hast sowas in dein Programm einzubauen!

Während du drüber nachdenkst klingelt wieder das Telefon, ein Historiker ruft an:
"Sorry, I tried to calculate some times back in the 18th century... but we changed from the julian calender to the gregorian calender back then. 
It's not that we lost three weeks, we just skipped from this date to this date three weeks later. Can you code that in?"
Also kommen in deinen Programmcode noch Länder rein die Ihren Kalender gewechselt haben und wann sie ihn gewechselt haben.
Mittlerweile ist dein Programmcode (historisch gewachsen!) ein einziges Chaos!

Dann ruft noch eine russicher Historiker an: "We changed to the gregorian calender in the 20th century, but the dates which need to be skipped depend on the location where you are."
Jetzt meldet sich ein britischer Historiker: "Until the 16th century our year started on the 25. of march, could you code that into your program?"
Nun ruft ein Astropyhisker an: "By the way: We just had a leap second"

Also baust du halt noch ein dass manchmal die Sekunden so zählen:

23:59:58
23:59:59
23:59:60
00:00:00

Gibts also manchmal eine 60. Sekunde und du hast 61 Sekunden in dieser Minute!
Also musst du dich entscheiden ob dein Programm entweder eine Sekunde anders läuft als der Rest der Welt, 
oder ob es damit klarkommt dass sich eine Sekunde wiederholt.

Dann musst du dich nur entscheiden ob du der Universal Time folgst die Schaltsekunden hat, oder lieber der astronomischen Zeit die keine hat, 
dafür aber nicht synchron mit der Universal Time ist und immer mehr abdriftet.

Was machst du also?
Du löscht deinen Code, du dankst den Leuten die das alles für dich gemacht haben, die das OpenSource gemacht haben, und nimmst deren Code :-)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.