|
Ein Zeitstempel (Timestamp) enthält Informationen über
Datum und Zeit in einer einzigen Variablen. Diese Darstellung hat IT-intern große Bedeutung, wird jedoch nicht für menschliche AnwenderInnen verwendet. |
UNIX-Timestamps zählen die
Sekunden seit 1970-01-01 00:00:00
Javascript verwendet als Variante Millisekunden (ms) statt (s).
|
Datum & Zeit
|
Datum und Zeit in Javascript |
IT-Datum
|
Datum und Zeit in der Informatik |
Timestamp
|
Variable für Datum und Zeit |
| Live-Timestamp | PC-Lokalzeit, Server-Zeit und Differenz |
| Timestamp lesen | Timestamp mit Javascript lesen |
| Timestamp schreiben | Timestamp mit Javascript schreiben |
| Date.UTC() | Liefert einen Timestamp aus UTC-Komponenten |
| Rechnen | Timestamps zum Rechnen mit Datum und Zeit |
| Live-Test | Timestamp Live codieren und decodieren |
Live-Timestamp |
|||||||||||||||||||
| Die Darstellung von Datum und Zeit nach dem Standard ISO-8601 ist für Menschen optimiert. Insbesondere wird sie weltweit eindeutig interpretiert. Sehen sie in der Tabelle ISO-Texte (Strings) und zum Vergleich die entsprechenden Timestamps. | Die Darstellung von Datum und Zeit in einer einzigen ganzzahligen Variablen ist für die Informatik optimiert. Der Timestamp lässt sich rasch und speicher-sparsam verwalten, und damit kann besonders rasch und einfach gerechnet werden (Differenzen). | ||||||||||||||||||
|
|||||||||||||||||||
| Die UNIX-Variante ist nicht die einzige Möglichkeit, Timestamps darzustellen: Nachfolgend einige andere Beispiele. | Vergleichen sie Typ (Geschwindigkeit!), Speicherbedarf, Genauigkeit (Auflösung), Grenzen | ||||||||||||||||||
|
► Integer
Neuere Systeme verwenden ausnahmslos Integer-(Ganzzahl)-Typen.
Das erlaubt weit höhere Rechengeschwindigkeit, erfordert jedoch die Verwendung kleiner
Zeit-Einheiten:In der Praxis werden Sekunden oder Millisekunden verwendet. |
► Double
Ältere Systeme verwenden Double-(Gleitkomma)-Typen.
Das ist langsam, jedoch je nach Anzahl der verwendeten Bits beliebig genau.
Zusätzlich zum Datum wird Speicherplatz für die Zeit benötigt:
Sekunden 17 Bit, Millisekunden 27 Bit, usw.Als Einheit wird 1 Tag verwendet. Dann entspricht der ganzzahlige Teil dem Datum, der Nachkomma-Teil der Uhrzeit. |
||||||||||||||||||
|
► Obergrenze
Es ist damit zu rechnen, dass zukünftige Betriebssysteme und Software 'breitere'
Variable verwenden, d.h. mehr Bit zum Rechnen und Speichern zur Verfügung stehen.
Bei 64 Bit werden die Grenzen für Zeitstempel praktisch aufgehoben:
Damit lässt sich ein Zeitraum von ca. 580 Millionen Jahren auf Millisekunden genau
darstellen.► Die Untergrenzen aller Systeme könnten problemlos aufgehoben werden, wenn auch negative Zahlen zur internen Verwendung zugelassen werden. Das würde nur 1 weiteres Bit und eine kleine Ergänzung des Kalender-Algorithmus kosten. Für den eigenen Gebrauch können sie problemlos auch mit negativen Datum-Variablen rechnen. |
Auflösung ("Genauigkeit"): ► Die Uhren heute üblicher PC können nur auf Sekunden genau eingestellt werden. Deshalb genügen Sekunden für absolute Zeit-Angaben, z.B. Erstellung oder Änderung von Dokumenten. ► In manchen Bereichen werden genauere Zeiten benötigt. Dort spielt jedoch meist das Datum keine Rolle. Hier wird kein Timestamp verwendet, sondern z.B. Sekunden als Double-Zahl. Beispiel: Der Aufbau dieser Webseite auf ihrem PC benötigte 0 ms. ► Nur in ganz wenigen technischen und wissenschaftlichen Bereichen (z.B. Astronomie, GPS) wird hohe Genauigkeit über lange Zeiträume benötigt, das erfordert tatsächlich Zeitmarken hoher Auflösung. |
||||||||||||||||||
|
►
Timestamp (verschiedene Systeme unterschiedlicher Speicherbreite)
benötigt bis heute ca. 31 Bit, bis zum Jahr 10000 ca. 38 Bit. Timestamps werden immer in Weltzeit (UTC) angegeben. Javascript arbeitet mit Millisekunden-Timestamps. Für eigene Rechnungen können sie problemlos auch negative Zahlenwerte verwenden und damit die Untergrenze auf alle historischen Daten erweitern. ► JD (keine Speicherform, sondern ein Standard-Algorithmus) benötigt für das Datum bis heute ca. 22 Bit, bis zum Jahr 10000 ca. 23 Bit. Dazu kommen für die Zeit (Sekunden) weitere 16 Bit. Die Obergrenze richtet sich nach den verfügbaren Speicher-Bits. JD ist derzeit das einzige System, in welchem sich alle bekannten und sinnvollen Datum-Werte darstellen lassen. Es wird daher u.a. in der Astronomie verwendet. |
►
Filemaker arbeitet zwar mit den Jahren 1 bis 4000,
verschenkt jedoch ganze 1582 Jahre durch einen Fehler im Kalender.
Der korrekt anwendbare Bereich umfasst 1583 bis 4000. ► Y1900 hat als Double-Variable theoretisch einen Anzeige-Bereich größer als das Alter des Universums. Gängige Programme setzen leider wesentlich engere Grenzen: OpenOffice arbeitet korrekt mit den Jahren 1 bis 32767, M$-Software nur von 1900 bis 9999. Durch einen notorischen Fehler im Kalender arbeiten M$-Programme überhaupt erst ab 1900-03-01 korrekt. ► Mit MJD (ebenfalls ein Standard-Algorithmus) wird normalerweise nur das Datum als ganze Zahl dargestellt, dazu genügen 5 Dezimalziffern. |
||||||||||||||||||
| ■ Details zu den Themen Datum und Zeit, SQL-Timestamp | |||||||||||||||||||
Lokalzeit und Weltzeit UTC |
|
|
●
Javascript Datum-Objekte und UNIX-Timmestamps werden in
Weltzeit UTC
geführt (früher Greenwich Mean Time GMT). Sie sind damit unabhängig von
lokalen Zeitzonen (time zones) oder Sommerzeit (daylight savings). ● Der Timestamp 0 liefert daher das UTC-Datum 1970-01-01 00:00:00, jedoch in Mitteleuropa die lokale Zeit 01:00:00, in Moskau 02:00:00 usw. |
●
Javascript bietet zum Lesen bzw. Schreiben von Datum-Objekten je einen kompletten
Satz von Funktionen für Lokalzeit (getFullYear . . getSeconds)
und für UTC (getUTCFullYear . . getUTCSeconds). ● Die Funktionen für Lokalzeit berücksichtigen die lokale Zeitzone und die Sommerzeit. ● Funktion getTimezoneOffset liefert die die momentane Differenz ihrer PC-Lokalzeit zur UTC (timezone offset) in Minuten. Sie ist nicht nur vom Ort, sondern seit Einführung der Sommerzeit (daylight savings) leider auch vom Datum abhängig ! Live: new.Date().getTimezoneOffset = 0
|
Timestamp mit Javascript lesen |
|
|
Die Funktion getTime()
liefert den Timestamp eines Date-Objekts
in Millisekunden. ► Das Beispiel berechnet daraus den aktuellen UNIX-Timestamp in Sekunden (Systemzeit ihres PC). ► Timestamps werden immer in Weltzeit (UTC) angegeben, sind daher unabhängig von Zeitzone und Sommerzeit und weltweit eindeutig und vergleichbar. |
dt = new Date();
Live-jts_now = dt.getTime(); uts_now = Math.round(jts_now/1000); uts_now = 1234567890
|
Timestamp mit Javascript schreiben |
|
|
Die Funktion setTime()
setzt ein Date-Objekt
auf einen Timestamp in Millisekunden. Einen bestimmten Timestamp (z.B. heute Mittag) erhält man so: Date-Objekt auf den gewünschten Zeitpunkt setzen, Timestamp lesen (Kasten oberhalb). |
Dieses Beispiel setzt das Date-Objekt
dt_mittag auf heute Mittag 12:00:00 Lokalzeit.
uts_mittag = 1234567890;
dt_mittag.setTime(uts_mittag * 1000); |
|
PC-Systemuhr:
Mit den set-Funktionen (setFullYear .. setSeconds)
können sie nur die Daten von
Javascript-Date-Objekten setzen, nicht
die Systemuhr ihres PC. Solche Zugriffe sind für (seriöse) Browser aus
Sicherheitsgründen untersagt. Kontrollieren sie in den Einstellungen, ob ihr Browser
Programm-Zugriffe (z.B. ActiveX) erlaubt.
|
Zur Synchronisation der PC-Systemuhr mit einem genauen Zeit-Server verwenden sie am besten NTP (Network Time Protocol)-Programme. Falls das nicht möglich ist (Firewall), dann bietet z.B. Perl elegante Möglichkeiten, die genaue Zeit von beliebigen Webservern zu beziehen. |
Die Funktion Date.UTC() |
|
|
►
Die Funktion liefert aus den einzelnen
UTC-(Weltzeit)-Bestandteilen
(Jahr, Monat, Tag, Stunden, Minuten, Sekunden) einen Timestamp. Bestandteile: Jahr, Monat, Tag, Stunde, Minute, Sekunde. Javascript zählt das Monat als Zahl 0..11 !
► Das Javascript Datum-Objekt new Date erwartet Argumente in Lokalzeit. Die Funktion getTime liefert davon einen Timestamp (in Millisekunden), allerdings in Weltzeit UTC ! ► Die Funktion Date.UTC erwartet Argumente in UTC und liefert ebenfalls einen Timestamp in UTC. Rechts Live-Beispiele für beide alternativen Methoden. Durch Verarbeitungs-Zeit und Rundungsfehler können die Werte um 1 sec abweichen. |
Test:
Lokalzeit = 2000-01-01 00:00:00
UTC = 2000-01-01 00:00:00
dt1 = new Date(2000,0,1,0,0,0);
Live-uts1 = dt1.getTime()/1000; uts2 = Date.UTC(2000,0,1,0,0,0); uts2/=1000;
uts1 = 1234567890
uts2 = 1234567890 Beachten sie die unterschiedlichen Argumente für die beiden Funktionen ! |
Rechnen mit Timestamps |
|
|
►
Zeitstempel ermöglichen das Rechnen mit Datum und Zeit:
Da es sich IT-intern um gewöhnliche Zahlen handelt,
kann problemlos addiert und subtrahiert werden. ► Die Umwandlung von Datum & Zeit in die jeweilige Zeitmarke (und umgekehrt) erfordert einen Kalender. Javascript verfügt dazu über einen internen Kalender, ► Der Kalender muss die unterschiedliche Anzahl von Tagen pro Monat und die Schaltjahre berücksichtigen. Falls ein Timestamp-System vor das Datum 1582-10-14 zurückreicht, muss auch die 'Gregorianische Kalender-Reform' berücksichtigt werden. ► 'Genaue' Systeme müssten theoretisch auch die Schaltsekunden berücksichtigen, die zum Jahreswechsel unregelmäßig eingeschoben werden. Das wird in derzeit üblichen Systemen nicht durchgeführt, daher ist bereits die Berechnung von Sekunden-Differenzen über einige Jahre hinweg fehlerhaft ! ► Jedes Betriebssystem enthält einen Kalender. Viele Programme (z.B. OpenOffice) verwenden jedoch eigene Kalender (z.B. um Fehler wie jenen aller bisherigen M$-Systeme vor 1900-03-01 zu vermeiden). |
Live- Berechnung der Zeit für den Aufbau dieser Webseite
jts_start = new Date().getTime();
// ... Javascript-Stoppuhr
jts_stop = new Date().getTime();dif_ms = jts_stop - jts_start;
dif_ms = 0 Millisekunden
Berechnung der Sekunden bis heute Mittag 12:00:00
jts_now = new Date().getTime();
uts_now = Math.round(jts_now/1000); uts_mittag = 1234567890; dif_s = (uts_mittag - uts_now);
dif_s = 0 Sekunden
Berechnung der Tage bis Sylvester 2000-12-31
uts = new Date().getTime();
sylvester = 1234567890; dif_d = (sylvester-uts)/(60*60*24);
dif_d = 0 Tage
|
|
Letzte Änderung dieser Seite: 2011-12-01 08:40:39
|