Eu vi que, para converter uma época em uma data e hora, o seguinte pode ser feito:
date -d @1346338800 +'%Y%m%d%H%M%S'
Como posso fazer o oposto no Linux? IE converter 20191027163020 em um valor de época? É possível fazer sem fazer um script Python ou outra linguagem de programação?
Linux
é apenas um kernel, não tem relação com as perguntas e respostas.Com a implementação do busybox
date
( GNUdate
também está considerando implementar uma opção semelhante ; GNU e busyboxdate
são as duas implementações comumente encontradas em sistemas que usam Linux como kernel que eu sei que suportam suadate -d @xxx
sintaxe).Com a implementação do ast-open
date
(como odate
builtin do ksh93 quando construído como parte do ast-open):Com o
strftime
embutido dezsh
:Com as versões atuais do GNU
date
, você pode transformá-lo em um formato compatível para seu-d
/-f
(como2019-10-27T16:30:20
):Observe que todos eles funcionam no horário local. Como o deslocamento do fuso horário não está incluído no seu formato, é ambíguo.
Por exemplo, no Reino Unido continental aqui, 20191027011200 poderia ser 1572138720 ou 1572135120, pois o relógio mostrava 01:12:00 duas vezes com um intervalo de uma hora após a mudança para o horário de inverno.
Você pode querer trabalhar sempre com horários UTC para evitar esse tipo de problema (definindo a
$TZ
variável de ambiente para,UTC0
por exemplo).Em geral, o comando date (as implementações que têm uma
-d
opção) pode converter de algumas strings de data formatadas em ISO8601 para um número de época.Mas se você quiser uma resposta para um formato geral, você precisa declarar o formato específico no qual a string de data é escrita. Isso pode ser feito com a
-f
opção para*BSD date
(no -d option), a-D
opção debusybox date
, a opção-p
para ast-open ou a variável DATEMSK em ksh93.Na data GNU você precisa fazer a formatação manualmente: