Wie konvertiere ich von einem Datumsformat in ein anderes Format?


11

Ich habe ein Problem mit meinem Datumsformat. Ich möchte von einem Format zum anderen wechseln und umgekehrt. Meine Datumsformate sind

Format 1

YYYY-MM-DD

Format 2

MM/DD/YYYY

Ich möchte Format 1 in Format 2 und Format 2 in Format 1 ändern.


Um klarer zu sein, ich habe die Datei Dateiname1: Datum 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. Erforderliche Ausgabe ist 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 und umgekehrt
AiB

Schrägstriche sind eines der
wenigen

Antworten:


14

Verwenden Sie dazu das GNU-Datum. Es wird auch zwischen anderen Formaten für Sie konvertiert (siehe date --helpfür die Liste der Formate).

$ date -d 2013-07-05 +%m/%d/%Y
07/05/2013
$ date -d 07/05/2013 +%F
2013-07-05

Um es klarer zu machen, habe ich die Datei Dateiname1: Datum 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. Erforderliche Ausgabe ist 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 und umgekehrt
AiB

1
@Abraham wie erfüllt dies nicht diese Anforderung?
Jordanm

6

Angenommen, Sie haben Daten in Textform, die konvertiert werden müssen

echo '2013-12-13' | awk -v FS=- -v OFS=/ '{print $2,$3,$1}'

Und umgekehrt

echo '12/13/2013' | awk -v FS=/ -v OFS=- '{print $3,$1,$2}'

Um es klarer zu machen, habe ich die Datei Dateiname1: Datum 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. Erforderliche Ausgabe ist 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 und umgekehrt
AiB

Danke 1_CR, es funktioniert jetzt nachdem ich ein bisschen modifiziert habe !! #! / bin / bash echo '$ 1- $ 2- $ 3' | awk -v FS = - -v OFS = / '{print $ 2, $ 3, $ 1}' data.file
AiB

@Abraham, Sie sollten Ihr Glück mit Drabenbenns dateAnsatz versuchen , der sicherlich eleganter ist
iruvar

3
$ echo YYYY-MM-DD | { IFS=- read y m d && echo "$m/$d/$y"; }
MM/DD/YYYY

Wenn Sie eine Datei mit vielen dieser Daten haben, eine pro Zeile:

awk -F- -vOFS=/ '{print $2,$3,$1}' < that-file

0

Verwenden Sie sed wie folgt:

$ echo '2013-12-13' | sed -r 's/([[:digit:]]{2,4})-([[:digit:]]{1,2})-([[:digit:]]{1,2})/\2\/\3\/\1/g'
12/13/2013
$ echo '12/13/2013' | sed -r 's/([[:digit:]]{1,2})\/([[:digit:]]{1,2})\/([[:digit:]]{2,4})/\3-\1-\2/g'
2013-12-13

0

Verwenden Sie eine Variante des Ansatzes von drawbenn, um die geklärte Frage in den Kommentaren zum Ändern des Datumsformats in einem Dateinamen zu beantworten gnu date. Dieser Befehl findet alle Dateien im lokalen Ordner und leitet nur den Dateinamen an weiter xargs, wobei der dategeänderte Dateiname als zweites Argument ersetzt wird, für mvdas die Umbenennung durchgeführt wird.

Die zusätzliche, leicht umständliche Verwendung der bashVariablensubstitution ist erforderlich, bashum den dateBefehl auszuwerten .

find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1  $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;
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.