Leider können sich die verschiedenen Länder nicht einig werden in welchem Format man das Datum richtig angibt:
Glücklicherweise hat jedes dieser Formate sein eigenen Trennzeichen!
Um das eine Format in das andere um zurechnen kann man, auf einem Unix-ähnlichen System, das Kommando date verwenden.
Möchte man ein beliebiges Format (in diesem Fall das US-Format) in das aktuelle Format, der System-Lokation ausgeben, dann sieht das wie folgt aus, wenn man das System auf Deutsch eingestellt hat:
Datum im DIN-Format bzw. Euro-Format:
> date +'%F'
Uhrzeit:
> date +'%F'
Wochentag (abgekürzt/ausgeschrieben):
> date +'%a' > date +'%A'
Kalenderwoche:
> date +'%W'
Kalenderwoche, Wochentag, Datum im Euro-Format und Uhrzeit:
> date +'kW%W %A %F %T'
Tag der Woche (1..7) 1=Montag
> date +'%u'
Datum nach lokaler Spracheinstellung
> date +'%x'
Zeit nach lokaler Spracheinstellung
> date +'%X'
Datum und Uhrzeit nach lokaler Spracheinstellung:
> date +'%x %X'
# date -d @1326704563 +'%F %T' 2012-01-16 10:02:43
# date -d "03/28/2010" +%F 2010-03-28
Man kann auch gezielt ein bestimmtes Format angeben:
# date -d "03/28/2010" +'%d.%m.%Y' 28.03.2010
Das ganze funktioniert auch mit Uhrzeit:
# date -d "03/28/2010 01:59:59" +'%Y-%m-%d %H:%M:%S' 2010-03-28 01:59:59 # date -d "03/28/2010 01:59:59" +'%F %T' 2010-03-28 01:59:59
Man kann das auch in Sekunden seit "1970-01-01 00:00:00" umrechnen:
# date -d "03/28/2010 01:59:59" +'%s' 1269737999
Die Zeitzone kann man sich so anzeigen lassen:
# date -d "03/28/2010 01:59:59" +'%z' +0100 # date -d "03/28/2010 01:59:59" +'%Z' CET
Leider gibt es in der Zeitzone "CET" aber diese Zeit zwischen "2010-03-28 02:00:00" und "2010-03-28 02:59:59" nicht!
So das man beim Versuch eine derartige Zeit umzurechnen, nur eine Fehlermeldung bekommt:
# date -d "2010-03-28 02:00:00" +'%s' date: ungültiges Datum „2010-03-28 02:00:00“
Diese Zeit kann man nicht als CET (Mitteleuropäische Zeit) sondern nur als UTC (koordinierte Weltzeit) umgerechnen:
# date -u -d "2010-03-28 02:00:00" +'%s' 1269741600
von einer gegebenen Zeitangebe einen Zeitabschnitt (Sekunde, Minute, Tag, Woche, Monat, Jahr) abziehen:
# date -d"2012-07-01 13:03:09 1 sec ago" +'%F %T' # date -d"2012-07-01 13:03:09 1 min ago" +'%F %T' # date -d"2012-07-01 13:03:09 1 hour ago" +'%F %T' # date -d"2012-07-01 13:03:09 1 day ago" +'%F %T' # date -d"2012-07-01 13:03:09 1 week ago" +'%F %T' # date -d"2012-07-01 13:03:09 1 month ago" +'%F %T' # date -d"2012-07-01 13:03:09 1 year ago" +'%F %T'
Will man einen Zeitabschnitt hinzu rechnen, dann muss man nur das "ago" weg lassen. Es sind auch Kombinationen von verschiedenen Zeitabschnitten möglich.
Bei dem BSD-date muss man zu jedem Eingabewert auch noch die Bedeutung angeben, damit ist es hier müglich, auch verhunste Zeitangaben zu reparieren. Immerhin gibt es eine Menge Leute, die immer noch nicht begriffen haben, wie sich die drei Formate zusammensetzen und verwenden oft das falsche Trennzeichen.
# date -jf "%a %b %d %T %Y" "Sun Mar 28 01:59:59 2010" +"%Y-%m-%d %H:%M:%S" 2010-03-28 01:59:59
# date -jf "%a %b %d %T %Z %Y" "Sun Mar 28 01:59:59 CET 2010" +"%Y-%m-%d %H:%M:%S" 2010-03-28 01:59:59