*rc3 nowhere Vorspann*
Herald: Hallo und herzlich willkommen zurück auf dem Kanal und zwar zu unserem
ersten Live Talk. Unser nächster Speaker ist Satan, er studiert Medientechnologie
an der TU Illmenau und arbeitet außerdem im Bereich Machine Learning. In seiner
Freizeit beschäftigt er sich mit Assembly Script und ist dabei auf die Zeitzonen
Datenbank der IANA gestoßen. Und was er dort gefunden hat, das erzählt uns jetzt.
For English speaking viewers: There's a translation. To listen to it in the web
player select language selection and than translated. Und jetzt Bühne frei für
Satan.
Satan: Danke schön. Genau. Herzlich willkommen zu meinem Talk über eine
Zeitzonen Datenbank und warum man die am besten nicht selbst implementieren sollte.
Genau. Erst mal so, was ich jetzt erzählen werde. Erstmal so grundsätzliches so über
die IANA Zeitzonen Datenbank, was es ist und was so die Hauptaspekt sind, die da
drin enthalten sind. Und dann werde ich anhand von Beispielen und Spezialitäten,
die darin enthalten sind, die Funktionalitäten darstellen. Und am Ende
kommt noch mal eine kleine Zusammenfassung darüber, was man damit dann machen kann.
Genau, also grundsätzlich ist die Zeitzonen Datenbank, von der IANA
veröffentlicht, das ist die Internet Assigned Numbers Authority, die kümmert
sich darum, um so Sachen wie DNS oder Zeitzonen oder eben auch wie IP-Adressen.
Andere Namen für die Zeitzonen Datenbank sind auch tz, tzdb oder zoneinfo. Das
kennt man aus unterschiedlichen Libraries oder sowas. Kommen einem diese Begriffe
vielleicht bekannt vor. Und die Idee dahinter ist, dass man eine möglichst
vollständige Liste aller Zeitzonen und Regeln hinter diesen Zeitzonen und
Offsets, die dadurch entstehen. Für alle Länder weltweit und also nicht nur Länder,
sondern auch Gebiete, das ist nicht unbedingt immer geografisch
[kurz fehlendes Audio] Zeit Differenzen auszurechnen. Diese Datenbank wird ständig
aktualisiert, das heißt immer wenn irgendwo ein Gesetz veröffentlicht wird
oder irgendwo irgendwelche neuen Länder entstehen oder sonst irgendetwas passiert,
was eine Änderung dafür nötig macht, wird die geupdated und ist, dann wird dann
verteilt möglichst schnell, damit alle Systeme, die eben auf solchen, auf diesen
Datenbanken basieren, möglichst schnell upgedated werden. Auch, man könnte jetzt
erwarten, dass sie irgendwie erst seit kurzem die Daten enthält. Aber in dieser
Datenbank sind eigentlich so Zeitzonen auch für die längere Vergangenheit
enthalten. Auch vor 1970 und 1972, also zum Beispiel 1970, hat ja die Unix-Zeit
begonnen und erst seit 1972 gibt es die UTC. Das ist die Coordinated Universal
Time. Genau, dann so grundsätzliches zu der Datenbank, wie sie aufgebaut ist. Es
ist eine öffentlich erreichbare Ordner mit Dateien. Es sind einfach nur Textdateien.
Es gibt z.B. über die Website kann man das erreichen, da kann man sich tar-Archive
herunterladen oder es gibt ein git-Repo in dem man die sich runterladen kann. Es gibt
auch einen FTP-Server oder ein rsync- Server dafür, also das ist möglichst
flexibel gehalten, damit sich damit ja der Aufwand, daran zu kommen, möglichst gering
ist. Das Ganze besteht aus Textdateien. Das ist einfach. Und diese Textdateien
sind nach Kontinent aufgeteilt. Zum Beispiel gibt es eine Textdatei für
Europa, eine Textdatei für Nordamerika und so etwas. Und in dieser Textdatei sind CSV
ähnliche, in dem Fall eher als CSV steht für comma separated values. In dem Fall
ist es character separated values, weil das sind Tab separierte Tabellen, in denen
eben diese Daten gespeichert werden. Daneben sind in diesen Datei noch ganz,
ganz viele Kommentare, in denen steht, warum etwas geändert wurde, wann sich
etwas geändert wurde und eben auch Links dazu zu den Gesetzestexten und sonstigen
Referenzen, die eben hilfreich sind, um die Datenbank zu verstehen. Zusätzlich
gibt es da noch in diesem Ordner noch ein paar Scripte, mit denen man sich diese
einigermaßen Menschen lesbaren Formate, diese Tabellen in einen Maschienen
lesbares Format exportieren kann, um die auch in Libraries und sowas zu verwenden,
um nicht immer den Text parsen zu müssen. Eine der von den beiden grundsätzlichen
Haupt-Datenpunkten, die enthalten sind, sind einmal die Zonen. Die sind meistens
so benannt nach einem Kontinent oder einem Ozean und dann mit einem Schrägstrich und
dann eine große Stadt, die da drin ist, z.B. jetzt hier in diesem Fall ist jetzt
ein Auszug aus der Europe-Datei und da gibt es eben die Zone Europe/Berlin und
diese Tabellen enthalten eine Liste von Regelsatz Änderungen, das heißt, da steht
sozusagen drin. Von wann bis wann muss welcher Regelsatz angewendet werden? Was
das genau ist, komme ich noch später dazu. Und was da eben auch drinsteht ist der
Base Offset. Also sozusagen für diese Zeitzone der Offset, den alle Gebiete in
dieser Zone grundsätzlich erstmal haben. Und was es auch noch gibt, ist eben diese
Format-Spalte und diese Format-Spalte ist sozusagen der, ein Name für diese
Zeitzone. Und das sind auch, seht ihr dieses %s, aber da komme ich später noch
mal genauer dazu. Das zweite sind die Regeln. Das sind die ganzen Regelsätze und
jede Zeile ist sozusagen eine Regel, wann irgendwo sich ein Offset ändert und was da
zum Beispiel auch enthalten sind. Seht ihr die letzte Spalte, die Letter-Spalte? Da
steht zum Beispiel dann ein Buchstabe drin, der dann in diesen Namen von der
Zeitzone eingefügt wird. Und zum Beispiel ist auch eine interessante Sache an diesen
Regelsätzen. Das ist für Wechsel auf Sommerzeit und Wechsel auf Winterzeit zwei
unterschiedliche Regeln gibt. Das heißt, es kann sozusagen sich die .. der Wechsel
auf die Winterzeit kann sich häufiger ändern als der Wechsel auf die Sommerzeit.
Und jetzt kommen wir zu den kleinen Beispielen die ich euch zeigen werde, um
sozusagen die Syntax und wie das Ganze aufgebaut ist, näher zu bringen, und ab
sofort werde ich auch nicht mehr den Code anzeigen, sondern schöner formatierte
Tabellen, damit es ein bisschen besser lesbar ist. Genau das erste ist Zion, das
ist das erste, ein Gebiet, und das ist das erste, was ich gefunden habe, weil wir
haben einen, ich habe einen Parser gebaut, sozusagen, um dieses menschenlesbare
Format auszulesen, und es war am Anfang war das Pasing nur für einzelne Dateien.
Und als ich dann das Pasinger mal für alle Dateien getestet habe, ist eben an dieser
Stelle der Parser fehlgeschlagen, weil diese Syntax Fri <= 1 in der kompletten
Datenbank genau einmal vorkommt. Und was ist diese Syntax eigentlich bedeutet? Wir
haben jetzt hier dieses, das "IN" und das "ON" Feld sozusagen bestimmen, sozusagen
wann diese und das "AT" Feld auch, bestimmen, sozusagen wann dieser Übergang,
also wann dieses Offset sozusagen, was in dem Safe in der Spalte steht, angewendet
wird. Und wenn da Fri <= 1 steht, bedeutet das, dass es der erste Freitag im April
ist, aber maximal der erste. Das heißt, wenn der Freitag, der erste Freitag im
April auf den zweiten oder oder bis zu den sechsten fällt, dann nehmen wir den
Freitag aus dem Vormonat. Und das ist eben schon genau eine dieser Stellen, die dann
sehr, sehr schwierig zu implementieren ist. Wenn man dann diese Datenbank dann
auch verwenden will, sozusagen, also Libraries dafür schreiben will. Dann ein
zweites Beispiel ist Lord Howe, das ist eine Insel in Australien und dort gibt
es zum Beispiel eine, die haben eine Winterzeit, eine Sommerzeit von oder
"Daylight Saving" von dreißig Minuten. Das heißt, sie wechseln immer zwischen 0
Minuten Offset und 30 Minuten Offset. Und das sehen wir zum Beispiel diese größer
gleich Syntax. Das ist eine ähnliche Syntax mit größer gleich statt kleiner
gleich. Und die besagt eben, dass es der erste Sonntag im Monat ist, aber minimal.
Der das heißt, dass es einfach immer nur der erste Sonntag im Monat. Dann eine
interessante Sache, die ich gefunden habe, ist Kriegs und Friedenszeit. Da gibt es im
US Regelsatz gibt es da zwei Regeln, also Änderungen von den Offsets, einmal 1942
und 1945, die sozusagen diesen Letter für "W" und "P" für war und peace setzen. Und
damit ist sozusagen wird an dieser Zeitzonename gefüllt. Da komme ich auch
später noch mal dazu, wie das dann in den Zonen aussieht. Was man da zum Beispiel
auch sieht ist, in der "TO" Spalte steht ein "only" und das heißt, es wird, dieser
Wechsel findet nur in genau diesem einen Jahr statt und danach nicht mehr. Genau
was man da auch sieht ist, in dem "AT" Feld in der in der vierten Zeile ist
dieses "u". Es gibt da so kleine Suffixe, die man hinten, die da hinten dranhängen
können. Da gibt es zum Beispiel "s", das steht für Standard. Da ist dann der
sozusagen, der, wird der Base Offset aus dem ähm, aus der aus der Zone verwendet.
Es gibt "g", dann wird sozusagen die Zeit in Greenwich Mean Time verwendet, "u" für
UTC, was jetzt in dem Fall der Fall ist, für wieder coordinated universal time oder
was zum Beispiel auch da stehen kann. Was auch der Standard ist, ist "w" das heißt
"wall" für "wall clock" und das heißt, es ist die Uhrzeit, die es an der Stelle zu
dem Zeitpunkt auch wirklich hätte, also die man an der Stelle von der Uhr ablesen
würde. Und da hat es aber der Default, das wird dann meistens weggelassen. Dann so
wie Sommer und Winterzeit funktioniert. Es gibt, wie vorhin schon erwähnt, getrennte
Zeilen für Wechsel auf Sommerzeit und Wechsel auf Winterzeit. Und das sieht man
jetzt hier an dem US Beispiel auch ganz schön, dass sie ihre.. den Wechsel auf
Daylight Saving Time deutlich häufiger geändert haben als auf Summertime. Was man
jetzt auch hier zum Beispiel sieht, ist in dem "TO" Feld ein "max". Und dieses "max"
bedeutet sozusagen bis in die Gegenwart. Implementiert ist das in manchen
Implementationen das an der Stelle einfach der maximal integer genommen wird. Und
dann ist das irgendein Jahr ganz weit in der Zukunft. Und das ist aber immer
sozusagen bis aktuell zur Gegenwart, was das auch aktuell ist. Dann habe ich noch
Hawaii mitgebracht. Dort sieht man zum Beispiel, das ist jetzt eine Zone bei der
Zone sieht man, das in der erst in den ersten zwei Spalten, die Zeilen nicht
wiederholt werden. Das liegt daran, dass sozusagen die Zone sich immer, auf die
gleiche Zone bezieht. Deswegen wird es dann weggelassen. Und was man dort auch
sieht ist, das Format steht "LMT", also Abkürzung. Das ist dann die Abkürzung für
die Zeitzone, in der Format-Spalte und "LMT" steht für Local Mean Time und ist
eigentlich gar kein richtiger Zeitzonen Name, wird aber innerhalb der Datenbank
immer verwendet, wenn es zu dem Zeitpunkt keinen richtigen Namen dafür gibt, weil
nichts veröffentlicht ist oder sonst irgendetwas. Das sieht man auch, das es,
dieser Name geht sozusagen bis 1896. Das heißt, das ist schon eine ganze Weile her,
bevor man überhaupt so viel mit Zeitzonen, so was sich Gedanken gemacht hat. Was man
auch hier an dem Hawaii Beispiel sieht, ist dieses "%s" in der vierten Zeile im
Format. Und an dieser Stelle wird dann so, wird dann der Buchstabe, der in der Regel
festgelegt wird, eingesetzt. Da muss eine Sache, die man da beachten muss, ist, dass
das führt. Damit das funktioniert, muss für diesen Zeitpunkt oder für diesen
Bereich auch ein Regelsatz gelten, weil zum Beispiel, wenn er jetzt ein Minus oder
eine einfache Zahl steht, dann gilt da kein Regelsatz. Und dadurch ist natürlich
auch kein Buchstabe dafür definiert. Was man jetzt genau ich auch gerade schon
erwähnt hatte, ist das auch eine Zahl stehen kann in "RULES", in "RULES" stehen
sozusagen welcher Regelsatz gerade angewendet wird. Wenn ein Minus steht,
gibt es einfach kein Regelsatz, dann geht es einfach nur der Standard-Offset. Wenn
da eine einfache Zahl steht, also eine Stunden und Minuten Zahl, dann ist das
sozusagen der Offset. Und wenn ein, eine Buchstabenkombination da steht, dann ist
das das Regelsätze auf der zu dem Zeitpunkt gilt. Genau dann habe ich noch
Alaska. Alaska wurde 1867 von Russland an die USA verkauft und dadurch haben sie
ihren Offset von +15h auf -9h, also ungefähr gewechselt, um sozusagen einmal
auf die andere Seite der der Datumsgrenze zu gehen. Und was daran auch interessant
ist, ist das, dass dieser Tag sozusagen doppelt stattgefunden hat, weil es
sozusagen um 15:33 Uhr, dann im Jahr 1867 haben sie um 24 Stunden zurückgesetzt die
Uhrzeit und dann hat der Tag sozusagen noch mal stattgefunden. Jetzt noch mal
eine kleine Zusammenfassung, wie das alles gemeinsam funktioniert. Wir gucken jetzt
die Zeitzone und den Regelsatz an, der aktuell bei uns gilt. Wir haben jetzt hier
die Zone Europe/Berlin. Das ist für Deutschland die Zone, die verwendet wird.
Und wir sehen, dass der vorletzte Eintrag bis 1980 gilt. Das heißt, wir sind darüber
hinaus. Und wenn das "UNTIL" Feld leer ist, heißt es einfach bis jetzt. Und da
sehen wir, wir haben einen Standard-Offset von einer Stunde und der Regelsatz, der
gerade gilt, ist "EU" und das Format, also der Name ist "CE" und dann der Platzhalter
und ein großes T. Jetzt schauen wir uns den EU Regelsatz also an, der aktuell
gilt. Da haben wir seit 1981 und 1996 gelten eben diese beiden Regeln, um in
Sommerzeit oder Winterzeit zu wechseln und zwischen Oktober und März gilt die untere
Regel. Also wir haben sozusagen im Oktober haben wir die untere Regel angewendet, um
den Safe, also den zusätzlichen Offset auf Null zu setzen, das heißt, wir haben einen
Standard-Offset von eins plus unserem Safe von Null. Das heißt, wir sind aktuell bei
einem gesamten Offset von UTC von Null. Und jetzt können wir uns noch den Letter
angucken, da es aktuell ist, ist da ein Strich, das heißt einfach nichts. Und wenn
wir das jetzt in das Template einsetzen, steht da CET und das ist Central European
Time. Und wenn wir jetzt sozusagen in der Sommerzeit wären, würde da ein "S" drin
stehen und dann hätten wir Central European Summertime. Genau das wäre es
jetzt auch so von meiner Seite aus. Ich danke euch vielmals für eure
Aufmerksamkeit und wünsche euch gestern noch viel Spaß auf dem Rest vom Kongress.
Genau, wenn ihr jetzt.. ich habe noch ein paar Links. Wenn ihr noch Fragen habt,
dann könnt ihr mir per Mastodon schreiben. Und noch einen Link zur Zeitzonen
Datenbank.
Herald: Genau. Vielen Dank Satan.. Satan: Dankeschön.
Herald: .. für den interessanten Talk. Genau. Im Anschluss an den Talk wird es
eine kleine Breakout Session geben und Satan wird da auch noch mal zur Verfügung
stehen. Das passiert in der rc3 World im FEM Office. Das müsste jetzt auch noch
eingeblendet werden. Genau perfekt. Und hier auf dem FEM-Kanal wird es jetzt dann
um 19 Uhr mit der nächsten Herald Newsshow weitergehen und um 20:15 Uhr mit dem
nächsten Talk zu Grundlagen der Video Kompression. Bis dahin und vielleicht bis
gleich.
*rc3 nowhere Abspann*
Untertitel erstellt von c3subtitles.de im Jahr 2022. Mach mit und hilf uns!