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.

AiB
quelle
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
Stéphane Chazelas
quelle
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}'
iruvar
quelle
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
Stéphane Chazelas
quelle
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
mark_infinite
quelle
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)' -- {} \;
rauben
quelle