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!