Como personalizar o formato de data da sua localidade em três etapas

Como personalizar o formato de data da sua localidade em três etapas

No meu sistema agora, por padrão, dateas saídas:

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

No entanto, se eu tentar inserir datas nesse formato, dateisso resultará em "data inválida":

$ date -d "$(date)"
date: invalid date ‘Fri 29 Jan 22:06:14 GMT 2016’

Sei que posso escolher manualmente um formato que dateentenda:

$ date -d "@$(date +%s)"
Fri 29 Jan 22:08:03 GMT 2016

Mas estou interessado em saber por que ele está exibindo um formato que não aceita novamente.

Responder1

Passei cerca de duas horas procurando por essa resposta que me incomoda há anos e finalmente a encontrei!!

Por padrão, dategera uma data no formato de localidade atual, como en_GB.UTF-8ou en_AU.UTF-8ou de_DE.UTF-8etc.

Sua localidade padrão parece semelhante à minha e exibe datas no formato:

date_fmt "%a %e %b %H:%M:%S %Z %Y"

Infelizmente, este é um dos poucos formatos que o comando date não consegue entender. No entanto, sePosso entenderum formato muito semelhante

date_fmt "%a %e %b %Y %H:%M:%S %Z"

"Sexta-feira, 29 de janeiro de 2016 22:04:26 GMT" Funciona

"Sexta-feira, 29 de janeiro, 22:04:26 GMT 2016" Não

Por que os códigos de idioma en_GB.UTF-8 e en_AU.UTF-8 comumente usados ​​usam um formato que datenão pode ser lido, eu não sei, mas é muito fácil ajustá-lo para que não incomode você novamente, pelo menos não até que você reinstale seu sistema ou suas definições sejam substituídas por uma atualização excessivamente zelosa >:-(

Como personalizar o formato de data da sua localidade em três etapas

Encontrei as seguintes informaçõesaqui:

1. Verifique qual localidade você está usando

Primeiro verifique qual localidade seu sistema está usando para o formato de hora e data

$ 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=

Note oLC_TIME=entrada. O meu é inglês australiano:pt_AU.UTF-8o seu pode ser en_GB_UTF-8

2. Edite a definição de localidade

Abra um terminal e edite a definição de localidade apropriada

$ sudo nano /usr/share/i18n/locales/{LC_Time}

por exemplo

$ sudo nano /usr/share/i18n/locales/en_AU

Role para baixo até a seção LC_TIME, aqui está a minha:

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

Tudo que você precisa alterar é a date_fmtentrada

Eu mudei o meu de: date_fmt "%a %e %b %H:%M:%S %Z %Y"paradate_fmt "%a %e %b %Y %H:%M:%S %Z"

Salve o arquivo e saia do editor

3 Regenere sua localidade

Você recompila seus arquivos de definição de localidade com:

$ sudo locale-gen

É isso! Agora, o datecomando deve fornecer a saída em um formato que ele próprio possa aceitar nativamente como entrada

$ date -d "$(date)"
Mon 17 Aug 2020 17:58:37 AWST

informação relacionada