Comment convertir d'un format de date en un autre format?


11

J'ai un problème avec mon format de date. Je souhaite passer d'un format à l'autre et vice versa. Mes formats de date sont

Format 1

YYYY-MM-DD

Format 2

MM/DD/YYYY

Je veux changer le format 1 au format 2 et le format 2 au format 1.


o pour être plus clair, j'ai le fichier file1 name: date 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. La sortie requise est 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 et vice
versa

Les barres obliques sont l'un des deux seuls caractères qui ne peuvent pas être dans un nom de fichier * nix ...
evilsoup

Réponses:


14

Utilisez GNU 'date' pour cela. Il convertira également entre d'autres formats pour vous (voir date --helpla liste des formats).

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

pour être plus clair, j'ai le fichier file1 name: date 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. La sortie requise est 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 et vice
versa

1
@Abraham comment cela ne répond-il pas à cette exigence?
jordanm

6

En supposant que vous ayez des dates sous forme de texte qui doivent être converties

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

Et vice versa

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

pour être plus clair, j'ai le fichier file1 name: date 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. La sortie requise est 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 et vice
versa

Merci 1_CR, ça marche maintenant après avoir modifié un peu !! #! / bin / bash echo '$ 1- $ 2- $ 3' | awk -v FS = - -v OFS = / '{print $ 2, $ 3, $ 1}' data.file
AiB

@Abraham, vous devriez tenter votre chance avec l' dateapproche de drewbenn , qui est certainement plus élégante
iruvar

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

Si vous avez un fichier avec beaucoup de ces dates, un par ligne:

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

0

En utilisant sed comme suit:

$ 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

Pour répondre à la question clarifiée dans les commentaires sur la façon de modifier le format de date dans un nom de fichier, utilisez une variante de l' gnu dateapproche de drewbenn . Cette commande recherche tous les fichiers dans le dossier local et redirige uniquement le nom du fichier vers xargs, en remplaçant le datenom de fichier modifié en tant que deuxième argument mvauquel effectuer le renommage.

L'utilisation supplémentaire, légèrement détournée de la bashsubstitution de variables est nécessaire lors de l' bashévaluation de la datecommande.

find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1  $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.