Die Zeit , Unix oder Zeit Posix (auch genannt Unix - Zeitstempel ) ist ein Maß der Zeit , basierend auf der Anzahl der Sekunden seit1 st Januar 197000:00:00 UTC , ohne Schaltsekunden . Es wird hauptsächlich in Systemen verwendet, die dem POSIX- Standard entsprechen , einschließlich Unix-ähnlichen Systemen , daher der Name. Es ist die POSIX-Darstellung der Zeit.
Um ein Ereignis mit einer reellen Zahl zu verknüpfen, genügt es, natürliche und universelle Referenzen zu verwenden: zum Beispiel die Periodizitäten der Rotation der Erde auf sich selbst und um die Sonne. Diese Zeiträume reichen aus, um Kalender zu erstellen, dh Beziehungen zwischen Ereignissen und Daten, auch wenn einige Anstrengungen erforderlich sind, um die verwendeten Referenzen klar zu definieren (jedes Land hat seine eigenen, alle zu unterschiedlichen Zeiten angenommen). Die Daten dieser Kalender sind nur Zahlen, die in einem etwas komplizierten Nummerierungssystem ausgedrückt werden, das die Einheiten Tag, Woche, Monat, Jahreszeit, Jahr usw. enthält, und die Posix-Zeit ist nicht weniger als eine Referenz, die unter anderem als einfache Zahl ausgedrückt wird .
Hauptmesssysteme verwendetHier sind die wichtigsten Zeitmesssysteme, die bis heute vorgestellt und verwendet wurden:
Akronym | Bedeutung | Definition |
---|---|---|
mittlere Greenwich-Zeit | Greenwich Mittlere Zeit | In einigen Ländern aus rechtlichen Gründen noch in Gebrauch.
Die Definition dieses Messsystems ist jedoch nicht eindeutig. Dies ist der Grund, warum es neben dieser administrativen Verwendung vorzuziehen ist, UTC zu verwenden. |
Ut | Weltzeit | Dieses System definiert den Tag als die durchschnittliche Dauer der Erdrotation um ihre Achse.
Diese Definition wirft einige Schwierigkeiten auf, da die Geschwindigkeit dieser Rotation nicht konstant ist, unter dem Einfluss der Gezeiten langsam abnimmt und darüber hinaus unvorhersehbare Unregelmäßigkeiten aufweist: Die Dauer der Tage UT ist im Durchschnitt geringfügig länger als 86.400 Sekunden ( Anzahl der Sekunden in 24 Stunden). Der Unterschied liegt in der Größenordnung von einer Sekunde über ein bis drei Jahre. Es gibt verschiedene Versionen von UT: UT0, UT1, UT1R, UT2. Weitere Informationen finden Sie im Artikel „ Weltzeit “ . |
TAI | Internationale Atomzeit | Dieses System basiert auf einer internationalen Definition des zweiten. Sein Standard besteht aus mehreren Atomuhren, die auf der ganzen Welt verteilt sind. Die Zeitmessung in diesem System ist streng regelmäßig, im Gegensatz zu der vorherigen, für die der Standard nicht die gleiche Regelmäßigkeit aufweist. Infolgedessen entfernen sich TAI und UT aufgrund der Verlangsamung der Sekunde allmählich voneinander.
|
koordinierte Weltzeit | Abgestimmte Weltzeit |
Dieses System wird von einer großen Anzahl von Ländern als Grundlage für die internationale Zivilzeit übernommen. Das Wort "koordiniert" gibt an, dass:
Mit anderen Worten, UTC ist bis zu einer ganzen Anzahl von Sekunden mit TAI identisch (es hat seine Stabilität und Genauigkeit), wodurch es möglich ist, auf die nächsten 0,9 s bei UT zu bleiben . das zeigt die nebenstehende Abbildung.
|
Um die Zeit zu messen, müssen Sie einen Ursprung auswählen:
Es muss angegeben werden, wie sich diese Zahl im Laufe der Zeit entwickelt:
# | TAI | koordinierte Weltzeit | TAI - UTC | Posix Zeit | |
---|---|---|---|---|---|
1 | 2009-01-01T00: 00: 30 | 2008-12-31T23: 59: 57 | 33 | 1,230,767,997 | |
2 | 2009-01-01T00: 00: 31 | 2008-12-31T23: 59: 58 | 33 | 1,230,767,998 | |
3 | 2009-01-01T00: 00: 32 | 2008-12-31T23: 59: 59 | 33 | 1,230,767,999 | |
4 | 2009-01-01T00: 00: 33 | 2008-12-31T23: 59: 60 | 33 | 1.230.768.000 | Hinzufügung einer Schaltsekunde |
5 | 2009-01-01T00: 00: 34 | 2009-01-01T00: 00: 00 | 34 | 1.230.768.000 | |
6 | 2009-01-01T00: 00: 35 | 2009-01-01T00: 00: 01 | 34 | 1.230.768.001 | |
7 | 2009-01-01T00: 00: 36 | 2009-01-01T00: 00: 02 | 34 | 1,230,768,002 |
Die Posix-Zeit ist keine lineare Darstellung der Zeit, es gibt Anomalien wie in Zeile 5 der obigen Tabelle.
Kein Korrespondenz- Bijektiv zwischen UTC und Posix-Zeit; Letzteres erlaubt es nicht, die in UTC vorhandenen Schaltsekunden darzustellen, wie in Zeile 4 der obigen Tabelle: 2008-12-31T23: 59: 60 UTC.
Diese unterschiedlichen Referenzen sollten nicht verwechselt werden (z. B. beginnt das Jahr Null eines Kalenders nicht zur gleichen Zeit wie das eines anderen Kalenders) und auch, weil sich alle diese Kalender an nicht mehrere Periodizitäten voneinander anpassen müssen, z. B. einen Sprung Jahre oder die Unregelmäßigkeiten dieser Periodizitäten. Diese Anpassungen erschweren die Berechnungen ein wenig, abhängig von der gewünschten Präzision. Beispielsweise kann ein verstrichenes Jahr eine ausreichende Information sein, oder es muss der Schaltcharakter des Jahres berücksichtigt werden, um dieselbe Frage in Anzahl von Tagen zu beantworten. Dies bedeutet, dass wir eine Erinnerung an die Vergangenheit behalten müssen, die Erinnerung an jede verstrichene Sekunde.
In den meisten Fällen ist ein einfacher Unterschied in den Posix-Zeiten ausreichend, es sei denn, die beiden Ereignisse erstrecken sich über eine oder mehrere Schaltsekunden. Um unter allen Umständen eine genaue Verzögerung zu berechnen, müssen Sie die Schaltsekunden berücksichtigen.
Das Auftreten von Schaltsekunden ist jedoch gering, so dass die Wahrscheinlichkeit, einen solchen Fehler zu begehen, gering ist. und wenn trotz allem der Fall auftritt, kann die Größe des Fehlers gering sein, und es besteht in diesem Fall kein Grund, sich über diese Schaltsekunden Gedanken zu machen; Die folgende Tabelle zeigt verschiedene Beispiele.
Die Methode zum Vervollständigen einer Zeile dieser Tabelle lautet wie folgt:
Wenn Sie diese Methode für die Zeiten M = 10, 100, 1000 anwenden, erhalten Sie die folgende Tabelle:
Zeit zum Messen (M) | Fehlerwahrscheinlichkeit | Größe des Fehlers |
---|---|---|
10 s | 3,2 × 10 –7 | 10% |
100 s | 3,2 × 10 –6 | 1% |
1000 s | 3,2 × 10 –5 | 0,1% |
Wenn die Zeit für die Berechnung zwischen den beiden interessierenden Ereignissen ein Jahr beträgt, beträgt die Wahrscheinlichkeit, einen Fehler von 3,2 × 10 -8 zu machen, 100% .
Die Wahrscheinlichkeit, einen bestimmten Fehler zu begehen, und die Größe dieses Fehlers variieren umgekehrt zueinander; Ein anderer Weg, es auszudrücken, könnte sein zu sagen:
Wenn dieses Paar (Wahrscheinlichkeit, einen Fehler zu machen / Größe des Fehlers) nicht akzeptabel ist oder wenn wir nicht wissen, wie die Auswirkungen zu bewerten sind, ist es sicherlich notwendig, die Frage zu stellen, warum wir UTC verwenden und wozu dies erforderlich ist notwendige Präzision oder um zu gewährleisten, dass die Verwendung von Tabellen aktualisiert wird, sobald das Einfügen / Entfernen einer Schaltsekunde programmiert ist.
UTC in Posix Time konvertierenAbgesehen von den oben erwähnten sehr seltenen Anomalien in Bezug auf Schaltsekunden ist es einfach, eine UTC-Zeit in eine Posix-Zeit umzuwandeln und umgekehrt.
Beispiel: Was ist die Posix-Zeit zu Beginn des Tages von 1 st Januar 2009(Zeile 5 von Tabelle 1 oben):
Anzahl der verstrichenen Tage | ||||
---|---|---|---|---|
1,970 | 1 971 | 1 972 | 1 973 | 3 * 365 + 366 = 1461 |
1,974 | 1 975 | 1 976 | 1 977 | 1461 |
1 978 | 1 979 | 1 980 | 1981 | 1461 |
1 982 | 1 983 | 1 984 | 1 985 | 1461 |
1,986 | 1 987 | 1 988 | 1 989 | 1461 |
1990 | 1.991 | 1.992 | 1.993 | 1461 |
1 994 | 1.995 | 1.996 | 1997 | 1461 |
1.998 | 1.999 | 2.000 | 2.001 | 1461 |
2.002 | 2.003 | 2004 | 2.005 | 1461 |
2.006 | 2.007 | 2.008 | 2 * 365 + 366 = 1096 | |
14 245 |
Es gibt auch Tools, die diese Berechnungen sehr einfach ausführen, wie z. B. dieses "Shell-Skript", um einige Sekunden seit der Posix-Ära in ein Datum umzuwandeln:
#!/bin/sh # convertir un nombre de secondes depuis l'époque Posix # en date # exemple: date -u -R --date "1970-01-01 1230768000 seconds" date -u -R --date "1970-01-01 $* seconds" Konvertieren einer Posix-Zeit in eine UTC-ZeitDie umgekehrte Berechnung stellt keine Schwierigkeit dar, und auf die gleiche Weise gibt es Tools, die diese Berechnungen sehr einfach ausführen, wie dieses Bash-Skript, um ein Datum in eine Anzahl von Sekunden seit der Posix-Epoche umzuwandeln:
#!/bin/sh # convertir une date (attention au format de l'argument) # en nombre de secondes depuis l'époque Posix # exemple: date --date "2009-01-01 00:00:00+00:00" "+%s" date --date "$*" "+%s"Die gebräuchlichste Methode zum Lesen der Zeit unter Unix ist der Aufruf der folgenden Funktion, die einen numerischen Wert vom Typ " time_t" zurückgibt .
time_t time(NULL);Dieser Typ time_t wird häufig verwendet, um die UNIX-Zeit zu manipulieren. Leider gibt der POSIX-Standard seine Größe nicht (eindeutig) an:
Unix-Zeit | koordinierte Weltzeit | |
---|---|---|
frühestes Datum: -2 31 | −2 147 483 648 | 1901-12-13 T 20:45:52 |
Unix-Ära: 0 | 0 | 1970-01-01 T 00:00:00 |
frühestes Datum: 2 31 -1 | 2,147,483,647 | 2038-01-19 T 03:14:07 |
Diese Unmöglichkeit der Darstellung stellt nicht notwendigerweise den Betrieb der Maschine selbst in Frage, dh den Betrieb ihres Betriebssystems, sondern den Betrieb ihrer Anwendungen und ihre Interoperabilität mit anderen Maschinen. Es reicht zwar nicht aus, dass eine Maschine weiß, wie dieses Limit lokal verwaltet wird, aber es ist auch erforderlich, dass alle an sie angeschlossenen Maschinen dieses Limit und dies auf dieselbe Weise verwalten können.
Es können mehrere Fälle auftreten:
Unix-Systeme behalten im Allgemeinen einen Zähler bei, dessen Auflösung feiner als die zweite ist. Auf diese Zeit kann durch Aufrufen der folgenden Funktion zugegriffen werden:
int gettimeofday(struct timeval *tv, NULL);Der von dieser Funktion zurückgegebene numerische Wert wird in der Variablen " struct timeval *tv " gespeichert, die wie folgt definiert ist:
struct timeval { int tv_sec; /* secondes */ int tv_usec; /* microsecondes de 0 à 999999 */ };Bei Verwendung dieser Auflösung von weniger als einer Sekunde stellt sich die Frage, was passiert, wenn eine Schaltsekunde addiert oder subtrahiert wird. Es scheint, dass dieser Punkt in der Verantwortung des Betriebssystems liegt. In Ermangelung einer klaren Spezifikation sind daher je nach Betriebssystem mehrere Szenarien möglich. Die drei folgenden Beispiele zeigen die drei Kategorien von Fällen, die am repräsentativsten erscheinen. Sie befassen sich nur mit dem Einfügungsaspekt einer Schaltsekunde, können jedoch leicht an den Fall der Löschung angepasst werden:
# | koordinierte Weltzeit | tv_sec | tv_usec | |
---|---|---|---|---|
4 | 2008-12-31T23: 59: 60.000 | 1.230.768.000 | 0 | |
2008-12-31T23: 59: 60.500 | 1.230.768.000 | 500.000 | ||
5 | 2009-01-01T00: 00: 00.000 | 1.230.768.000 | 0 | Zeit plötzlich angepasst |
2009-01-01T00: 00: 00.500 | 1.230.768.000 | 500.000 | ||
6 | 2009-01-01T00: 00: 01.000 | 1.230.768.001 | 0 |
# | koordinierte Weltzeit | tv_sec | tv_usec | |
---|---|---|---|---|
4 | 2008-12-31T23: 59: 60.000 | 1.230.768.000 | 0 | |
2008-12-31T23: 59: 60.500 | 1.230.768.000 | 0 | gefrorene Stunde | |
5 | 2009-01-01T00: 00: 00.000 | 1.230.768.000 | 0 | gefrorene Stunde |
2009-01-01T00: 00: 00.500 | 1.230.768.000 | 500.000 | ||
6 | 2009-01-01T00: 00: 01.000 | 1.230.768.001 | 0 |
# | koordinierte Weltzeit | tv_sec | tv_usec | |
---|---|---|---|---|
4 | 2008-12-31T23: 59: 60.000 | 1.230.768.000 | 0 | |
2008-12-31T23: 59: 60.500 | 1.230.768.000 | 250.000 | verlangsamte Stunde | |
5 | 2009-01-01T00: 00: 00.000 | 1.230.768.000 | 500.000 | verlangsamte Stunde |
2009-01-01T00: 00: 00.500 | 1.230.768.000 | 750.000 | verlangsamte Stunde | |
6 | 2009-01-01T00: 00: 01.000 | 1.230.768.001 | 0 |
Die Idee, die internationale Atomzeit zu nutzen, wurde bereits von vielen Menschen vorgeschlagen und verteidigt, aber dies ist nicht die Bedeutung, die die Geschichte gegeben hat. Die gewählte Wahl war die, die heute durch den POSIX-Standard eingefroren wird.
Daniel J. Bernstein hat auch Artikel und Software für die Verwendung von TAI auf UNIX-ähnlichen Systemen geschrieben.
Die Unix-Gigasekunde bezieht sich auf die Unix-Stunde 10 9 , die die darstellt9. September 2001.