====== Datumformate_umrechnen ====== Leider können sich die verschiedenen Länder nicht einig werden in welchem Format man das Datum //richtig// angibt: * **USA**: [Monat]**/**[Tag]**/**[Jahr] (zum Beisliel: 03**/**28**/**2010) * **Europa (alt)**: [Tag]**.**[Monat]**.**[Jahr] (zum Beisliel: 28**.**03**.**2010) * **Europa (neu)**: [Jahr]**-**[Monat]**-**[Tag] (zum Beisliel: 2010**-**03**-**28) 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: ==== allgemeine Parameter von "date" ==== * [[http://www.fibel.org/linux/lfo-0.6.0/node80.html]] * [[http://www.flashsystems.de/articles/1521]] 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' ==== GNU-date ==== # 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. ==== BSD-date ==== 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