Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.os.unix.programming > #3139
| From | Helmut Waitzmann <nn.throttle@erine.email> |
|---|---|
| Newsgroups | de.comp.os.unix.programming |
| Subject | Re: Keine Liebe fuer Schaltsekunden? |
| Date | 2026-03-15 22:49 +0100 |
| Organization | A noiseless patient Spider |
| Message-ID | <83fr60kblb.fsf@helmutwaitzmann.news.arcor.de> (permalink) |
| References | <10ohttn$1bni9$1@solani.org> |
Christian Steins <cs01@quantentunnel.de>: > folgendes LUA Programm: > […] > Liefert die Ausgabe ds=0. D.h. die Anzahl Sekunden zwischen den > beiden Datum:mern ist ein Vielfaches der Tagessekunden 86400. > > Nun gab es allerdings in den letzten 50 Jahren ca. 25-30 Mal > eine Schaltsekunde. Warum wird das nicht berücksichtigt? Ist LUA > hier eine Ausnahme? > Vermutlich ist LUA keine Ausnahme. „Vermutlich“ deshalb, weil ich es nur für Linux (wir sind hier aber in „de.comp.os.unix.programming“) und der GNU‐C‐Bibliothek mit Bestimmtheit sagen kann: Da kriegt man es hin, dass der Sekundenzähler Schaltsekunden berücksichtigt, also mitzählt, und trotzdem daraus die richtigen Uhrzeiten berechnet werden. Unter Linux läuft der Sekundenzähler im Betriebssystemkern (zunächst) stur durch. (Woher sollte er auch wissen, wann eine Schaltsekunde auftritt?) Wenn eine (positive) Schaltsekunde auftritt, weiß der Betriebssystemkern nichts davon und zählt den Sekundenzähler einfach – wie bei jeder anderen Sekunde auch – eine Sekunde weiter, hält ihn nicht an, drosselt auch sein Tempo nicht und setzt ihn auch nicht eine Sekunde zurück. Wenn eine negative Schaltsekunde auftritt, weiß der Betriebssystemkern ebenfalls nichts davon und führt den Sekundenzähler nicht nach. Damit dann die Uhrzeit richtig angezeigt wird, braucht man eine Datenbank, in der die Schaltsekunden vermerkt sind. Alternativ könnte man auch den Sekundenzähler nachführen: Bei einer (positiven) Schaltsekunde müsste man ihn für eine Sekunde lang anhalten oder eine Sekunde zurückzählen. Bei einer negativen – das ist meines Wissens bisher noch nie vorgekommen – müsste man ihn eine Sekunde extra weiterzählen. Das dürfte bei deinem System der Fall sein. Und man muss in beiden Fällen der GNU‐C‐Bibliothek mitteilen, wie man es mit dem Sekundenzähler im Betriebssystemkern hält, das heißt, ob man die Datenbank mit Schaltsekunden oder die ohne Schaltsekunden verwenden will. Der Systemadministrator kann eine Voreinstellung für die Datenbankauswahl konfigurieren, aber man kann sie auch bei jedem Aufruf einer Library‐Funktion mit der Umgebungsvariablen „TZDIR“ aufs Neue auswählen. Das sieht man im folgenden Beispiel: Die erste Schaltsekunde seit 1970-01-01T00:00+0000 gab es eine Sekunde nach dem Zeitpunkt 1972-06-30T23:59:59+0000, also bei 1972-06-30T23:59:60+0000. Die Umgebungsvariable „TZDIR“ gibt die Datenbank an: „/usr/share/zoneinfo/right/“ ist die Datenbank, die von Schaltsekunden weiß. „/usr/share/zoneinfo/posix/“ ist die Datenbank, die nichts von Schaltsekunden weiß und also ausnahmslos jede Minute als 60 Sekunden lang annimmt. Das GNU‐„date“‐Programm kann mit der Option „-f“ Uhrzeiten von einer Datei einlesen und gemäß des Formatierungsparameters ausgeben. Damit kann das Shell‐Kommando printf '1970-01-01T00:00:00+0000 %s seconds\n' \ "$((78796799 + 0))" \ "$((78796799 + 1))" \ "$((78796799 + 2))" | TZDIR=/usr/share/zoneinfo/right/ TZ=:Etc/UTC \ date -f - -- '+%s seconds since Epoch = %Y-%m-%dT%H:%M:%S%z' Folgendes ausgeben: 78796799 seconds since Epoch = 1972-06-30T23:59:59+0000 78796800 seconds since Epoch = 1972-06-30T23:59:60+0000 78796801 seconds since Epoch = 1972-07-01T00:00:00+0000 Das Shell‐Kommando printf '1970-01-01T00:00:00+0000 %s seconds\n' \ "$((78796799 + 0))" \ "$((78796799 + 1))" \ "$((78796799 + 2))" | TZDIR=/usr/share/zoneinfo/posix/ TZ=:Etc/UTC \ date -f - -- '+%s seconds since Epoch = %Y-%m-%dT%H:%M:%S%z' gibt Folgendes aus: 78796799 seconds since Epoch = 1972-06-30T23:59:59+0000 78796800 seconds since Epoch = 1972-07-01T00:00:00+0000 78796801 seconds since Epoch = 1972-07-01T00:00:01+0000 => Nach der ersten Schaltsekunde seit Neujahr 1970 UTC unterscheidet sich die Umrechnung zwischen Uhrzeit und Sekundenzähler im Vergleich beider Datenbanken um 1 Sekunde. Umgekehrt kann GNU‐date auch Uhrzeiten in den Sekundenzähler umrechnen: Mit der Datenbank mit Schaltsekunden liefert das Shell‐Kommando printf '%s\n' \ '1972-06-30T23:59:59+0000' \ '1972-06-30T23:59:60+0000' \ '1972-07-01T00:00:00+0000' | TZDIR=/usr/share/zoneinfo/right/ TZ=:Etc/UTC \ date -f - -- '+%Y-%m-%dT%H:%M:%S%z = %s seconds since Epoch' die folgende Ausgabe: 1972-06-30T23:59:59+0000 = 78796799 seconds since Epoch 1972-06-30T23:59:60+0000 = 78796800 seconds since Epoch 1972-07-01T00:00:00+0000 = 78796801 seconds since Epoch Mit der Datenbank ohne Schaltsekunden liefert das Shell‐Kommando printf '%s\n' \ '1972-06-30T23:59:59+0000' \ '1972-06-30T23:59:60+0000' \ '1972-07-01T00:00:00+0000' | TZDIR=/usr/share/zoneinfo/posix/ TZ=:Etc/UTC \ date -f - -- '+%Y-%m-%dT%H:%M:%S%z = %s seconds since Epoch' die folgende Ausgabe: 1972-06-30T23:59:59+0000 = 78796799 seconds since Epoch date: invalid date ‘1972-06-30T23:59:60+0000’ 1972-07-01T00:00:00+0000 = 78796800 seconds since Epoch Man sieht: Die Uhrzeit „1972-06-30T23:59:60+0000“ gibt es in der Datenbank ohne Schaltsekunden nicht.
Back to de.comp.os.unix.programming | Previous | Next — Previous in thread | Find similar
Keine Liebe fuer Schaltsekunden? Christian Steins <cs01@quantentunnel.de> - 2026-03-07 20:22 +0100
Re: Keine Liebe fuer Schaltsekunden? Urs Janßen <urs@niko.tin.org> - 2026-03-07 19:38 +0000
Re: Keine Liebe fuer Schaltsekunden? Christian Steins <cs01@quantentunnel.de> - 2026-03-07 20:46 +0100
Re: Keine Liebe fuer Schaltsekunden? Urs Janßen <urs@niko.tin.org> - 2026-03-07 20:40 +0000
Re: Keine Liebe fuer Schaltsekunden? ram@zedat.fu-berlin.de (Stefan Ram) - 2026-03-07 20:34 +0000
Re: Keine Liebe fuer Schaltsekunden? Marcel Mueller <news.5.maazl@spamgourmet.org> - 2026-03-08 13:25 +0100
Re: Keine Liebe fuer Schaltsekunden? Ralph Aichinger <ra@h5.or.at> - 2026-03-08 13:12 +0000
Re: Keine Liebe fuer Schaltsekunden? Helmut Waitzmann <nn.throttle@erine.email> - 2026-03-15 22:49 +0100
csiph-web