Wie legt man ein Format für die Eingabe bis heute fest?


19

dateWie kann ich bei einem Datum und einer Uhrzeit in einem Format, das nicht von erkannt wird , dateDatum und Uhrzeit erkennen?

Beispielsweise:

$ date -d "09SEP2012:23:58:46"
date: invalid date `09SEP2012:23:58:46'
$ date -d "09SEP2012:23:58:46" --magic-option "ddMMMYYY:hh:mm:ss"
Sun Sep  9 23:58:46 MDT 2012

Gibt --magic-optiones Wenn nicht, gibt es eine elegantere Möglichkeit, dies zu lösen, als seddie Eingabe in eine wohlgeformte Datumszeichenfolge umzuwandeln?


Siehe auch:
Datumsüberprüfung

Antworten:


10

Weder POSIX noch GNU Datum haben --magic-option. FreeBSD ruft es auf -f(mit einer Syntax date, die der von Ihnen vorgeschlagenen Syntax für das Ausgabeformat ähnelt ).

Ihr Datum steht kurz davor, vom GNU-Datum erkannt zu werden: Alles, was Sie brauchen, ist das Ersetzen des Doppelpunkts, der das Datum von der Uhrzeit durch ein Leerzeichen trennt.

date -d "$(echo "09SEP2012:23:58:46" | sed 's/:/ /')"

1
und mit benutzerdefinierten Formaten? Nur noch reguläre Ausdrücke? das ist schrecklich :-(
phil294

1
Sie können Daten nicht analysieren, ohne etwas über das Format zu wissen, in dem sie vorliegen. Das klassische Beispiel ist 01/02/03:
Gilles 'SO- hör auf böse zu sein'

5

Ich habe eine Reihe von Werkzeugen ( Dateutils ) geschrieben, die Datums- und Zeitangaben skriptfreundlicher behandeln. Ihre magische Option gibt es --input-format|-izB:

dconv -i '%d%b%Y:%H:%M:%S' "09SEP2012:23:58:46"
=>
  2012-09-09T23:58:46

Das Ausgabeformat wird dconvzwar nicht direkt unterstützt date(es gibt keine Konferenzen TZoder ähnliches in der Umgebung), es gibt jedoch ein Tool strptimein dateutils , das den %ZFormatbezeichner unterstützt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.