Existe uma maneira rápida e simples de converter um registro de data e hora do Unix para uma data na linha de comando do Unix?
date
pode funcionar, exceto que é bastante estranho especificar cada elemento (mês, dia, ano, hora etc.), e não consigo descobrir como fazê-lo funcionar corretamente. Parece que pode haver uma maneira mais fácil - estou perdendo alguma coisa?
bash
shell
unix
unix-timestamp
chimeracoder
fonte
fonte
Respostas:
Com os GNU's,
date
você pode:(De: BASH: Converter carimbo de data e hora do Unix em uma data )
No OS X, use
date -r
.Como alternativa, use
strftime()
. Ele não está disponível diretamente no shell, mas você pode acessá-lo via gawk . O%c
especificador exibe o registro de data e hora de maneira dependente da localidade.fonte
date -d @1278999698 +'%Y-%m-%d %H:%M:%S'
Onde o número atrás@
é o número em segundosfonte
date -r 1278999698 +'%Y-%m-%d %H:%M:%S'
(GMT) ou simplesmentedate -r 1278999698
Esta solução funciona com versões da data que não suportam
date -d @
. Não requer AWK ou outros comandos. Um registro de data e hora do Unix é o número de segundos desde 1º de janeiro de 1970, UTC, portanto é importante especificar o UTC.Se você estiver em um Mac, use:
Comando para obter época:
O crédito vai para Anton: BASH: converter carimbo de data e hora do Unix em uma data
fonte
Como o @TomMcKenzie diz em um comentário para outra resposta,
date -r 123456789
é sem dúvida uma solução simples mais comum (ou seja, mais amplamente implementada) por tempos dados em segundos desde a época Unix, mas infelizmente não existe uma solução portátil universal garantida.A
-d
opção em muitos tipos de sistemas significa algo completamente diferente da--date
extensão do GNU Date . Infelizmente, o GNU Date não interpreta-r
o mesmo que essas outras implementações. Infelizmente, você precisa saber qual versãodate
está usando, e muitosdate
comandos antigos do Unix não suportam nenhuma das opções.Pior ainda, o POSIX
date
não reconhece nem-d
nem-r
fornece nenhum caminho padrão em nenhum comando (que eu saiba) para formatar um horário do Unix a partir da linha de comando (já que o POSIX Awk também não possuistrftime()
). (Você não pode usartouch -t
els
porque o primeiro não aceita um tempo dado em segundos desde a época do Unix.)Observe que The One True Awk, disponível diretamente de Brian Kernighan, agora possui a
strftime()
função incorporada e também umasystime()
função para retornar o tempo atual em segundos desde a época do Unix); portanto, talvez a solução Awk seja a mais portátil.fonte
Se você achar a notação estranha, talvez a
-R
opção-ajude. Ele ultrapassa a data no formato RFC 2822. Então você não vai precisar de todos os identificadores:date -d @1278999698 -R
. Outra possibilidade é a saída da data em segundos em sua localidade:date -d @1278999698 +%c
. Deve ser fácil de lembrar. :-)fonte
Ligeira correção para a resposta de dabest1 acima. Especifique o fuso horário como UTC, não GMT:
O segundo está correto. Penso que a razão é que, no Reino Unido, o horário de verão estava em vigor continuamente entre 1968 e 1971.
fonte
A solução Perl padrão é:
(ou hora local, se preferir)
fonte
fonte
Outros exemplos aqui são difíceis de lembrar. Na sua forma mais simples:
fonte
Coloque o seguinte em seu ~ / .bashrc:
Exemplo de uso:
fonte
Pitão:
fonte