Cómo personalizar el formato de fecha de tu localidad en tres pasos

Cómo personalizar el formato de fecha de tu localidad en tres pasos

En mi sistema ahora mismo por defecto datesalidas:

$ date
Fri 29 Jan 22:04:26 GMT 2016

Sin embargo, si intento volver a introducir fechas de este formato, dateobtengo 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 dateentienda:

$ 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-8o en_AU.UTF-8o de_DE.UTF-8etc.

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 dateno 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_fmtentrada.

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 datecomando 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

información relacionada