Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.os.unix.programming > #3139

Re: Keine Liebe fuer Schaltsekunden?

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>

Show all headers | View raw


 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 | NextPrevious in thread | Find similar


Thread

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