En mi sistema ahora mismo por defecto date
salidas:
$ date
Fri 29 Jan 22:04:26 GMT 2016
Sin embargo, si intento volver a introducir fechas de este formato, date
obtengo una "fecha no válida":
$ date -d "$(date)"
date: invalid date ‘Fri 29 Jan 22:06:14 GMT 2016’
Me doy cuenta de que puedo elegir manualmente un formato que date
entienda:
$ date -d "@$(date +%s)"
Fri 29 Jan 22:08:03 GMT 2016
Pero me interesa saber por qué genera un formato que no acepta nuevamente.
Respuesta1
¡Pasé unas dos horas buscando esta respuesta que me ha molestado durante años y finalmente la encontré!
De forma predeterminada date
, genera una fecha en el formato local actual, como en_GB.UTF-8
o en_AU.UTF-8
o de_DE.UTF-8
etc.
Su configuración regional predeterminada parece similar a la mía y muestra las fechas en el formato:
date_fmt "%a %e %b %H:%M:%S %Z %Y"
Lamentablemente, este es uno de los pocos formatos que el comando de fecha no puede comprender. Sin embargo, siPuede entenderun formato muy similar
date_fmt "%a %e %b %Y %H:%M:%S %Z"
"Viernes 29 de enero de 2016 22:04:26 GMT" Funciona
"Viernes 29 de enero a las 22:04:26 GMT de 2016" No
¿Por qué las configuraciones regionales de uso más común en_GB.UTF-8 y en_AU.UTF-8 usan un formato que date
no se puede leer? No lo sé, pero es muy fácil modificarlo para que no vuelva a molestarte, al menos no. hasta que reinstale su sistema o sus definiciones sean sobrescritas por una actualización demasiado entusiasta >:-(
Cómo personalizar el formato de fecha de tu localidad en tres pasos
encontré la siguiente informaciónaquí:
1. Comprueba qué configuración regional estás usando
Primero verifique qué configuración regional está utilizando su sistema para su formato de fecha y hora.
$ locale
LANG=en_AU.UTF-8
LANGUAGE=en_AU
LC_CTYPE="en_AU.UTF-8"
LC_NUMERIC=en_AU.UTF-8
LC_TIME=en_AU.UTF-8
LC_COLLATE="en_AU.UTF-8"
LC_MONETARY=en_AU.UTF-8
LC_MESSAGES="en_AU.UTF-8"
LC_PAPER=en_AU.UTF-8
LC_NAME=en_AU.UTF-8
LC_ADDRESS=en_AU.UTF-8
LC_TELEPHONE=en_AU.UTF-8
LC_MEASUREMENT=en_AU.UTF-8
LC_IDENTIFICATION=en_AU.UTF-8
LC_ALL=
Nota laLC_TIME=entrada. El mío es inglés australiano:es_AU.UTF-8el tuyo podría ser en_GB_UTF-8
2. Edite la definición local
Abra una terminal y edite la definición de configuración regional adecuada
$ sudo nano /usr/share/i18n/locales/{LC_Time}
p.ej
$ sudo nano /usr/share/i18n/locales/en_AU
Desplázate hacia abajo hasta la sección LC_TIME, aquí está la mía:
LC_TIME
abday "Sun";"Mon";"Tue";"Wed";"Thu";"Fri";"Sat"
day "Sunday";/
"Monday";/
"Tuesday";/
"Wednesday";/
"Thursday";/
"Friday";/
"Saturday"
abmon "Jan";"Feb";/
"Mar";"Apr";/
"May";"Jun";/
"Jul";"Aug";/
"Sep";"Oct";/
"Nov";"Dec"
mon "January";/
"February";/
"March";/
"April";/
"May";/
"June";/
"July";/
"August";/
"September";/
"October";/
"November";/
"December"
d_t_fmt "%a %d %b %Y %T %Z"
d_fmt "%d//%m//%y"
t_fmt "%T"
am_pm "AM";"PM"
t_fmt_ampm "%I:%M:%S %p"
date_fmt "%a %e %b %Y %H:%M:%S %Z"
week 7;19971130;1
END LC_TIME
Todo lo que necesitas cambiar es la date_fmt
entrada.
Cambié el mío de:
date_fmt "%a %e %b %H:%M:%S %Z %Y"
adate_fmt "%a %e %b %Y %H:%M:%S %Z"
Guarde el archivo y salga del editor.
3 Regenera tu localidad
Vuelve a compilar tus archivos de definición local con:
$ sudo locale-gen
¡Eso es todo! Ahora el date
comando debería proporcionar de forma predeterminada la salida en un formato que él mismo pueda aceptar de forma nativa como entrada.
$ date -d "$(date)"
Mon 17 Aug 2020 17:58:37 AWST