Datum und Zeit - Strings

Normierte Darstellung von Datum und Zeit - ISO 8601

Zu allen Zeiten entstanden lokale Varianten der verschiedensten Dinge. Mit Ausnahme der USA werden mittlerweile lokale Varianten durch international eindeutige ersetzt. Der Hauptteil dieser Seite ist dem Standard ISO.8601 vorbehalten, der international anerkannte Regeln für die Darstellung von Datum und Zeit definiert.
Datum und Zeit Datum & Zeit Schnittpunkt von uralter Kultur und Informationstechnik
ISO-8601 Internationaler Standard für Strings:   yyyy-mo-dd hh:mi:ss
Formatierung von Jahr, Monat und Monatstag
Formatierung der Uhrzeit
Berechnung der Kalenderwoche, Wochentag
Formatierung der lokalen Zeitzone
Formatierung als Jahr-Tag
W3C DateTime Teilmenge der ISO-8601 Formate (z.B. für SiteMap)
Entwicklung ISO-8601 in Systemen, Programmen und Programmiersprachen
Andere Standards zur Formatierung von Datum und Zeit
Überholter deutscher Standard für Strings
Überholter US-Standard für Strings
Links Ausgewählte Links zum Thema 'Text-Standards für Datum & Zeit'

ISO-8601:   Der internationale Standard für Datum-Zeit-Strings

Die Völker der Erde haben unzählige verschiedene Formen erfunden, um Datum und Zeit schriftlich auszudrücken. Das ISO-Datum ist der erste und einzige erfolgreiche Versuch, einen Datum & Zeit-String weltweit einheitlich und eindeutig verständlich zu machen.

Der Standard ISO-8601 definiert die Formatierung von Datum und Zeit als String (Text).
ISO-8601 (seit 1988) ist gleichlautend mit den Standards EN28601 und DIN 5008 und durch praktisch alle Staaten der Erde anerkannt. Insbesondere in der EU hat sich das Format durchgesetzt.

Das ISO-Datum ist ein gutes Beispiel für einen Standard, der sowohl für Menschen als auch für die Technik (Informatik) große Vorteile bringt:

ISO-Daten lassen sich einfacher verarbeiten und sind daher in der Entwicklung billiger, in der Anwendung schneller. Sie lassen sich besser und schneller kontrollieren, sortieren und an verschiedene Anforderungen anpassen.
Es bringt wirtschaftliche Vorteile, diesen Standard einzusetzen:
In der IT-Entwicklung erspart man sich (zumindest in diesem Bereich) die teure nationale Anpassung der Software. Das macht die Entwicklung rascher, sicherer und billiger.
In der IT-Anwendung ist das Risiko von menschlicher Fehl-Interpretation (z.B. in anderen Ländern) deutlich geringer, ebenso das von IT-Fehlern bei Verwaltung, Verarbeitung und Transport von Daten.

In diesem Web wird der ISO-8601-Standard verwendet, wo immer das möglich ist. Von der großen Anzahl möglicher Varianten wird nur eine kleine Anzahl vorgestellt.

Die Anwendung internationaler Standards in einem kleinen nationalen Gebiet ist zwar empfehlenswert, aber nicht unbedingt notwendig. Datum und Zeit-Angaben sind in einem kleinen kulturellen Raum meist auch dann eindeutig, wenn sie in kurioser Form erfolgen, wie z.B. die österreichische Verbal-Variante von 18:40: "fünf vor dreiviertel sieben am Abend".
Rechts die aktuelle Zeit im ISO-Format
('YYYY-MO-DD hh:mi:ss'):
yyyy-mo-dd hh:mi:ss

Vorteile von ISO-8601:

Die fixe absteigende Hierarchie der Teile (Jahr .. Sekunde) garantiert die richtige Sortierung von ISO-Texten.
Die erwünschte Genauigkeit wird einfach durch Verkürzung oder Verlängerung des ISO-Strings erreicht.

Die fixe Position und Länge aller Bestandteile erleichtert die Kontrolle und vermeidet Fehler durch falsche Interpretation.
Deshalb kann auch die Codierung und Decodierung von ISO-Strings wensentlich rascher erfolgen.

Fixe Hierarchische Reihenfolge

Die Reihenfolge der Bestandteile ist streng hierarchisch: Die größte Einheit (Jahr) staht am Anfang, die kleinste (Sekunden) am Ende. Solche Strings werden von jedem Programm in jedem Betriebssystem richtig sortiert. - Diese wichtige Eigenschaft erfordert keinerlei sonstige Maßnahmen und trifft nur (!) auf das ISO-Format zu.

Deshalb kann das ISO-Datum auch als Bestandteil von Dateinamen gut eingesetzt werden:
Dokumente mit Namen wie  'name_20010203.doc'  werden von jedem (!) Betriebssystem automatisch in der chronologischen Reihenfolge sortiert.

Variable Genauigkeit:

Wenn geringere Genauigkeit ausreicht, kann das Format gekürzt werden, z.B. auf das Datum (10 Zeichen). Nicht benötigte Daten werden einfach weggelassen.
2001-02-03

Bei höheren Ansprüchen an Genauigkeit kann das Format ergänzt werden. Das erfolgt durch Angabe eines Komma-Punktes nach den Sekunden und beliebig vieler Kommastellen danach.
0000-00-00 00:00:00.123

Fixe Länge und Position aller Teile

0123456 789101112 131415161718
YYYY -MO -DD  HH :MI :SS
0000 -00 -00  12 :34 :56
Der Standard ISO-String hat immer die gleiche Länge von 19 Zeichen. Jeder Bestandteil hat darin seine fixe Position:
Achten sie darauf, Zahlen<10 immer mit führenden Nullen zu formatieren !

Strings fixer Länge bieten in der IT bedeutend mehr Sicherheit gegen Interpretations-Fehler als solche mit variabler Länge.
Die fixe Position erleichtert und beschleunigt die Codierung und Decodierung (z.B. mit → Regulären Ausdrücken).
Die Umwandlung zwischen Strukturen ganzer Zahlen (Jahr, Monat, Tag, Stunde, Minute, Sekunde jeweils als ganze Zahl) und dem ISO-Datum erfolgt besonders rasch und einfach. Das gleiche gilt für → XML-Daten und den ISO-Standard.

Auch in Varianten mit kleinerer oder größerer Genauigkeit hat jeder Bestandteil (wenn vorhanden) die gleiche Position wie im Standard ISO-String.

'Umstellung' auf ISO-8601

ISO-8601 ist ein 'erfundener' Standard. Daher ist die Umstellung nicht durch Nationalstolz gefährdet: Niemand muss die Formatierung eines anderen Volkes annehmen, das Format ist für alle gleich 'neu'.

Je größer und internationaler eine Organisation, desto früher und leichter der Umstieg auf einheitliche Normen. Dafür sorgt schon der finanzielle Vorteil.

Bei Armeen und in einigen Berufsgruppen ist dieses Datum-Format weltweit schon lange in Gebrauch.

Allerdings ist auch die Einstellung anzutreffen, alte Gewohnheiten aus keinem vernünftigen Grund aufzugeben. Immerhin werden in den USA auch Gallonen, Meilen, Fu0 und Zoll zäh verteidigt. Die Umstellung wird umso teurer, je weiter sie hinausgezögert wird.
Schon eher verständlich die Haltung des IT-Marktführers, der viel Geld mit der Einstellung verdient, freie internationale Standards nach Möglichkeit zu ignorieren. Das funktioniert, solange die KundInnenen mitmachen und dafür auch noch zahlen.

In einigen Publikationen (z.B. Wikipedia) wird nicht der ISO-Standard verwendet sondern der deutsche Monatsname ausgeschrieben. Das ist (Januar / Jänner) nicht einmal im deutschen Sprachraum eindeutig. Da Wiki-Texte für jede Sprache in eigene Webseiten übersetzt werden, ist die Eindeutigkeit trotzdem kein Problem.

ISO-8601 in Standard-Programmen:

ISO-8601 wird von (fast) allen modernen Programmen unterstützt.
OpenOffice kennt das ISO-Format für Datum, für Zeit, jedoch leider nicht für Datum und Zeit zusammen. Immerhin lässt es sich als BenutzerIn-spezifisches Format   'JJJJ-MM-TT HH:MM:SS'  eingeben.

M$ bietet zwar in neueren Versionen ebenfalls das ISO-Format, es ist jedoch sehr gut versteckt und daher fast unbekannt.
Menü Format | Zellen | Zahlen | Datum | Gebietsschema | International | JJJJ-MM-TT hh:mm:ss
Dieses Format kann man auch als BenutzerIn-spezifisches Format   'JJJJ-MM-TT hh:mm:ss'  eingeben.
Die Registry-Datenbank von Win-Betriebssystemen enthält einige Schlüssel zur Formatierung von Datum und Zeit, die man selbst ändern kann. (suchen sie z.B. nach 'YYYY') Achtung: Änderungen in der Registry können unabsehbare Folgen bewirken und erfordern daher fortgeschrittene Kenntnisse. Jede Änderung erfolgt auf eigenes Risiko !

Datum nach ISO-8601

Der ISO-Text beginnt immer mit dem Datum.
Jahr-Monat-Monatstag sind in fallender Reihenfolge angeordnet.
Das Jahr wird immer 4-stellig angegeben, Monat und Tag immer 2-stellig mit führender Null.
Als Trennzeichen wird das - Minus-Zeichen verwendet.
Das ergibt eine konstante Länge von 10 Zeichen für das ISO-Datum
In der ISO-Form ist das Datum weltweit eindeutig und unmissverständlich formatiert. Das ist ein weseentlicher Vorteil des ISO-Standards - besonders im Vergleich zum veralteten deutschen → DIN-5008 Standard oder gar zu den chaotischen Varianten der US → RFC-822-Formate.

Kompakt-Variante ohne Trennzeichen:

Bei fixer Einhaltung der Reihenfolge und der Stellen-Anzahl können die Trennzeichen optional wegfallen.
yyyymoddhhmiss
Kompakt-Variante
yyyymodd
Dieses Format wird von einigen Programmen (z.B. → MySQL) verwendet, ist jedoch für Menschen unübersichtlich.
Man kann die Daten sogar platzsparend als eine (!) ganze Zahl (Integer/Long) speichern, jedoch nicht damit rechnen !

Kalender

Es ist nicht sicher, ob der ISO-Standard fix an einen → Kalender gebunden ist.
De facto wird er für aktuelle Daten nur mit dem weltweit dominierenden Gregorianischen Kalender verwendet.

Bei historischen Angaben wird normalerweise bis 1582 der Julianische Kalender (nach Julius Caesar) verwendet und danach der Gregorianische (nach Papst Gregor XIII).
Einige Staaten stellten ihre Kalender jedoch erst viel später um, z.B. USA 1752, Türkei 1926), daher sind historische Daten dieser Staaten erst nach entsprechender Korrektur vergleichbar.

Uhrzeit nach ISO-8601

Die Zeit wird nach dem Datum angegeben.
Stunden:Minuten:Sekunden sind in fallender Reihenfolge angeordnet.
Alle 3 Einheiten werden 2-stellig (mit führender Null) angegeben
Als Trennzeichen wird der : Doppelpunkt verwendet. Zwischen Datum und Uhrzeit wird ein Leerzeichen eingesetzt.
Das ergibt eine konstante Länge von 8 Zeichen für die Zeit.
Die Zeit wird überall auf der Welt in 24 Stunden angegeben.
Lediglich die USA halten an ihrer komplizierten Einteilung in Vormittag (AM) und Nachmittag (PM) fest. Immerhin ist auch dort die Angabe der 24-Stunden Zeit eindeutig verständlich.

Tageswechsel:

Die Angaben für die Zeit 00:00 und 24:00 können beide verwendet werden. Empfohlen wird jedoch nur 00:00.
Beispiel:
yyyy-mo-031 24:00 = yyyy-mo-02 00:00

Kalenderwoche und Wochentag nach ISO-8601

Auch die Definition der 7-Tage-Woche sowie der
Wochen-Anfang am Montag sind im ISO-Standard festgelegt.

ISO-Definition der → Kalenderwoche:

Definition:

Die erste Kalenderwoche eines Jahres ist jene Woche, welche als erste mehrheitlich (>=4 Tage) in das neue Jahr fällt.
Syntax der Kalenderwoche nach ISO-8601:
1997-W01
für die Woche 1996-12-30 bis 1997-01-05

Die Wochentag-Nummer kann angehängt werden, z.B. für heute Wochentag:
1997-W01-2
Auch für die Kalenderwoche gibt es kompakte Formate ohne Trennzeichen. Diese Texte (Strings) sollten jedoch nur intern eingesetzt werden, da sie für Menschen weniger gut lesbar sind und daher zu unnötigen Fehlern führen können. Kompakt-Format der aktuellen Kalenderwoche:
yyyyWww
yyyyWwwd
Da es nur ganze 7-Tages-Wochen gibt, kommt es am Jahreswechsel oft zu Überschneidungen: Die W52 des Vorjahrs reicht noch <=3 Tage in das Neue Jahr, oder W01 reicht <=3 Tage zurück ins alte Jahr.

Achtung: In den USA wird die Kalenderwoche nach einem anderen Algorithmus berechnet. In manchen ! Jahren ergeben beide Algorithmen für Arbeitstage das gleiche Ergebnis.
Details zur Berechnung von ISO-KW und US-Kalenderwochen, Algorithmen, Programm-Beispiele, etc.

Zeitzone und Weltzeit UTC nach ISO-8601

Weltzeit UTC

ISO-8601 bietet auch eine Möglichkeit für die Angabe der → Zeitzone:
Ein nachgestelltes Zeichen "Z" steht für die Weltzeit → UTC ("Zulu Time").
hh:mi:ssZ
hhmissZ
hhmiZ

Lokale Zeit

Zur Charakterisierung der lokalen Zeit geben sie den Unterschied zur UTC in Stunden:Minuten mit Vorzeichen nach der Uhrzeit an:
12:00Z = 13:00+01:00
Die Namen der Zeitzonen (z.B. CET) sind leider nicht standardisiert und dürfen daher nicht angeführt werden.

Ein besonderes Problem ist die Sommerzeit:
Seit ihrer Einführung ist die Angabe der Zeitzone keine eindeutige Aussage mehr !
Außerhalb der EU, jedoch innerhalb der gleichen Zonen gibt es Gebiete mit und ohne Sommerzeit, bzw. wird der Zeitpunkt der Umstellung nach unterschiedlichen Algorithmen berechnet. Darüber hinaus werden die Sommerzeit-Regeln jedes Jahr von einigen Staaten und Bundesstaaten geändert. Das führt vor allem bei jüngeren historischen Daten zu chaotischen Zuständen.
Deshalb gibt man an Stelle der Zeitzone den momentanen Abstand zur Weltzeit UTC an, z.B. in Mitteleuropa bei Normalzeit +01:00, bei Sommerzeit +02:00.

Diese Methode ist flexibler und hat noch weitere Vorteile: Man kann damit nicht nur die Zonen-Zeit sondern sogar die mittlere oder wahre → Ortszeit angeben !

Tages des Jahres nach ISO-8601

Eine weitere zulässige Sonderform ist die Angabe des Datums als YYYY-DDD,   z.B. für heute
yyyy-ddd
Die Zählung beginnt am 1.Jänner = Tag 001 jedes Jahres und reicht in Normaljahren bis 365, in Schaltjahren bis 366.
Die Tage müssen zur eindeutigen Unterscheidung 3stellig codiert sein, das Trennzeichen darf in diesem Fall nicht weggelassen werden.

W3C

Word Wide Web Consortium (W3C) DateTime Format

Das World Wide Web Consortium definierte 1998 eine Teilmenge der ISO-8601 Formate zur Verwendung in Web Applikationen.
Der Standard ist international etabliert, wird jedoch offenbar aus Rücksicht auf die USA (komplizierte RFC-822-Formate) nur als 'Diskussion' bezeichnet...
Diese Formate sind für die automatische Verarbeitung von Datum- und Zeit Texten (Strings) besonders geeignet.
W3C DateTime Formate (unverbindlich)
FormatLive
YYYY
YYYY
YYYY-MO
YYYY-MO
YYYY-MO-DD
YYYY-MO-DD
YYYY-MO-DDThh:miTZ YYYY-MO-DDThh:mi+01:00
YYYY-MO-DDThh:miZ YYYY-MO-DDThh:miZ
YYYY-MO-DDThh:mi:ss.fTZ
Die DateTime-Auswahl verwendet ausschließlich fixe Länge aller Komponenten, d.h. Jahr 4stellig, alle anderen 2stellig mit führender Null.
Anwendung u.a. in einer Standard (Google) SiteMap.
Die Weltzeit UTC wird mit "Z" angegeben, bei Lokalzeit wird der Abstand zur UTC angeführt (in Mitteleuropa +01:00, bei Sommerzeit +02:00).
Das genaueste Format (mit Sekunden und -Bruchteilen) wird in der Praxis nicht verwendet.

Programmierung von ISO-8601-Strings

Kalkulation mit LibreOffice oder OpenOffice

Zelle markieren, Menübefehl Format | Zellen | Zahlen | Datum.
Das Datum wird mit Format-Code JJJJ-MM-TT (Bezeichnung ISO-8601, Muster 1999-12-31) ISO-formatiert, die Zeit mit Zeit-Format-Code HH:MM:SS, Datum & Zeit gemeinsam mit dem Benutzerdefinierten Format-Code JJJJ-MM-TT HH:MM:SS

Kalkulation mit MS-Excel

Zelle markieren, Menübefehl Format | Zellen | Zahlen | Benutzerdefiniert.
Das Datum wird mit Typ=JJJJ-MM-TT ISO-formatiert, für die Zeit gibt es ein Standardformat *13:30:55, Datum & Zeit gemeinsam werden mit Typ=JJJJ-MM-TT hh:mm:ss ISO-formatiert.

Linux Shell-Konsole

# date --rfc-3339="seconds"
# date "+%Y-%m-%d %H:%M:%S"
Wenn sie ein Alias anlegen, z.B.
# alias isodate='date "+%Y-%m-%d %H:%M:%S"'
dann können sie das aktuelle ISO-Datum anzeigen:
# isodate

Details zu Datum & Zeit @ Linux

Windows-Konsole (cmd.exe)

C:\> date /T
C:\> time /T
Keine ISO-Formatierung, kann aber programmiert werden.

Details zu Datum & Zeit @ Windows, CygWin

C++

Die Version 1999 der Programmiersprache C entspricht dem ISO-Standard mit der Funktion strftime() mit format specifier "%Y-%m-%d %H:%M:%S". Details zu Datum & Zeit @ C/C++

Javascript

Leider ist keine Standard-Funktion zur ISO-Formatierung eines Datum-Zeit Objekts verfügbar.
Eine eigene Funktion kann jedoch einfach erstellt werden.
Details zu Datum & Zeit @ Javascript

Perl

use POSIX;
$s = "%Y-%m-%d %H:%M:%S";
$iso = strftime($s, localtime(time()));
Details zu Datum & Zeit @ Perl

PHP

$s = "%Y-%m-%d %H:%M:%S";
$iso = strftime($s,time());
Details zu Datum & Zeit @ PHP

VBA

Leider keine Standard-Funktion zur ISO-Formatierung. Angesichts des gestörten Verhältrnisses des Herstellers zu Standards aller Art ist das kein Wunder.
Eine eigene Funktion kann jedoch einfach erstellt werden.
Details zu Datum & Zeit @ VBA

Decodierung

Einer der wichtigsten Vorteile ist die einfache Aufspaltung eines ISO-8601 Strings zur Validierung (Datum zulässig ? ) und Interpretation (welches Datum ?).
Am besten eignen sich dazu → Reguläre Ausdrücke (RegExp).
Stellen sie zuerst die Variante fest. Sie ist im Idealfall vorgegeben. Ansonsten wird meist yyyy-mo-dd hh:mi:ss (evtl. mit weniger Bestandteilen) verwendet, seltener das Kompakt-Format ohne Trennzeichen oder die Spezialformate für Tag des Jahres, Kalenderwoche oder Tag der Woche.
Isolieren sie die Text-Bestandteile und wandeln sie die Ergebnisse in Zahlen um.
Im Beispiel wird zuletzt aus den Teil-Ergebnissen ein Date-Objekt zur weiteren Verarbeitung erzeugt.
Live Javascript-Beispiel (vereinfacht):
var iso = "yyyy-mo-dd hh:mi:ss";
var dt = null;
if (iso.match(/(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/)) {
dt=new Date(RegExp.$1, RegExp.$2-1, RegExp.$3, RegExp.$4, RegExp.$5, RegExp.$6);
}
alert ("dt="+dt);
alert (dt.toLocaleString());
Live-Test mit ihrem PC & Browser.

Details und Beispiele zu Regulären Ausdrücken (RegExp).