¿Cómo convertir de un formato de fecha a otro formato?


11

Tengo un problema con mi formato de fecha. Quiero cambiar de un formato a otro y viceversa. Mis formatos de fecha son

Formato 1

YYYY-MM-DD

Formato 2

MM/DD/YYYY

Quiero cambiar el formato 1 al formato 2 y el formato 2 al formato 1.


o sea más claro, tengo el archivo file1 name: fecha 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. La salida requerida es 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 y viceversa
AiB

Las barras diagonales son uno de los dos únicos caracteres que no pueden estar en un nombre de archivo * nix ...
evilsoup 05 de

Respuestas:


14

Use GNU 'date' para esto. También se convertirá entre otros formatos para usted (consulte date --helpla lista de formatos).

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

para ser más claro, tengo el nombre del archivo file1: fecha 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. La salida requerida es 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 y viceversa
AiB

1
@Abraham, ¿cómo no cumple con ese requisito?
jordanm

6

Suponiendo que tiene fechas en forma de texto que deben convertirse

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

Y viceversa

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

para ser más claro, tengo el nombre del archivo file1: fecha 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. La salida requerida es 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 y viceversa
AiB

Gracias 1_CR, ¡está funcionando ahora después de que modifiqué un poco! #! / bin / bash echo '$ 1- $ 2- $ 3' | awk -v FS = - -v OFS = / '{print $ 2, $ 3, $ 1}' data.file
AiB

@Abraham, deberías probar suerte con el dateenfoque de drewbenn , que sin duda es más elegante
iruvar

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

Si tiene un archivo con muchas de esas fechas, una por línea:

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

0

Usando sed de la siguiente manera:

$ 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

Respondiendo la pregunta aclarada en los comentarios sobre cómo cambiar el formato de fecha en un nombre de archivo, use una variante del enfoque de drewbenn gnu date. Este comando encuentra todos los archivos en la carpeta local y canaliza solo el nombre del archivo xargs, sustituyendo el datenombre de archivo modificado como el segundo argumento al mvque realiza el cambio de nombre.

El uso adicional y ligeramente tortuoso de la bashsustitución de variables es necesario al bashevaluar el datecomando.

find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1  $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.