Return to Video

Warum man Zeitzonen nicht selbst implementieren sollte

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

more » « less
Video Language:
German
Duration:
16:30

German subtitles

Revisions Compare revisions