Eu tenho um carimbo de data / hora UNIX e gostaria de obter uma data formatada (como a saída de date
) correspondente a esse carimbo de data / hora.
Minhas tentativas até agora:
$ date +%s 1282367908 $ date -d 1282367908 date: invalid date `1282367908" $ date -d +1282367908 date: invalid date `+1282367908" $ date +%s -d +1282367908 date: invalid date `+1282367908"
Gostaria de obter resultados como:
$ TZ=UTC somecommand 1282368345 Sat Aug 21 05:25:45 UTC 2010
Resposta
No Mac OS X e BSD:
$ date -r 1282368345 Sat Aug 21 07:25:45 CEST 2010 $ date -r 1282368345 +%Y-%m-%d 2010-08-21
com as ferramentas centrais GNU (você tem que vasculhar o arquivo de informações para isso):
$ date -d @1282368345 Sat Aug 21 07:25:45 CEST 2010 $ date -d @1282368345 --rfc-3339=date 2010-08-21
Com qualquer um deles, adicione a opção -u
(padrão) ou passe uma TZ=UTC0
variável de ambiente para ter a data UTC (TZ=UTC0
define um fuso horário chamado UTC
com deslocamento 0 do UTC enquanto o comportamento de TZ=UTC
(sem deslocamento) não é especificado (embora na maioria dos sistemas se refira a um definido pelo sistema fuso horário também chamado de UTC
com deslocamento 0 do UTC)).
Comentários
Resposta
Este one-liner perl fará isso:
$ perl -e "print scalar localtime $ARGV[0]" 1282367908 Sat Aug 21 09:18:28 2010
Resposta
Depois de pesquisar no Google, descobri uma maneira de fazer isso com date
somente comando:
$ date --date "Jan 1, 1970 00:00:00 +0000 + 1282367908 seconds" Sat Aug 21 09:18:28 MSD 2010
Comentários
- Obrigado por isso. Eu esperava que ' fosse algo mais simples, então apenas um voto favorável por enquanto.
- outro ótimo exemplo de como o Google o torna estúpido. ninguém mais lê a documentação?
- @hop, o suporte para
date -d @xxx
não foi adicionado até o coreutils 5.3 em 2005. Esse ' é como você tinha que fazer antes disso. - @St é phaneChazelas: a) esta resposta é de 2010 eb) por que isso desculpa googling antes de ler a documentação? Se você responder por sua própria autoridade, pode-se desculpar cometer erros como este, mas se você tiver que pesquisar de qualquer maneira, pesquise corretamente.
- @hop, eu estava apenas apontando que não era uma resposta estúpida, apenas uma desatualizada.
Resposta
Com shell embutido:
-
zsh
(4.1.1 (2003) e superior):$ zmodload zsh/datetime $ TZ=UTC0 strftime %c 1282368345 Sat 21 Aug 2010 05:25:45 UTC
-
ksh93
(ksh93i
(2000) e superior):$ TZ=UTC0 printf "%(%c)T\n" "#1282368345" Sat Aug 21 05:25:45 2010
-
bash
(4.2 (2010) e superior):$ TZ=UTC0 printf "%(%c)T\n" 1282368345 Sat 21 Aug 2010 05:25:45 UTC
Em todos eles, substitua %c
pelo formato strftime()
que você deseja.
Comentários
- Você tem uma referência para a
bash
printf
solução? - Esqueça, eu encontrei na descrição de
printf
em gnu.org/software/bash/manual/bashref.html#Bash-Builtins .
Resposta
No osx, para ter em UTC
date -r "1475737200" -u
Comentários
- Obrigado. Eu ' editei isso na resposta aceita para que a informação esteja mais prontamente disponível.
Resposta
Responda a uma pergunta antiga, mas acho que pode ser uma melhoria se alguém pesquisar por isso. Esta função Bash funciona em Linux e OS X. Não testei em nenhum outro sistema BSD. Passe o tempo de época como um argumento para esta função e ela imprimirá o formato de hora RFC-3339.
epochtorfc3339 () { RFC3339_FORMAT="+%FT%T:::%z" EPOCH=$(echo $@ | sed -n "s/.*\([0-9]\{10\}\).*/\1/p"); if date --version >/dev/null 2>/dev/null; then # Linux date ${RFC3339_FORMAT} -d "1970-01-01 UTC ${EPOCH} seconds" #date -d @${EPOCH} --rfc-3339=seconds else # OS X/BSD date -r ${EPOCH} ${RFC3339_FORMAT} fi }
Resposta
Outro exemplo interessante da rica herança do Unix moderno. Isso é realmente possível na maioria das variantes do BSD:
$ TZ=UTC date -r 1282368345 Sat Aug 21 05:25:45 UTC 2010
(A propósito, seu exemplo parece estar errado por um segundo)
Comentários
- Não ' funciona no Linux. A resposta de hop ' parece ter a resposta correta do Linux. Obrigado por apontar isso, eu suspeitei que algo assim iria acontecer, eu ' fiz 45 segundos agora.
info coreutils date
um pouco mais cuidadosamente.date -r 1447264553943
resultados emWed Dec 28 01:39:03 BRST 47831
, quando ' é realmente11/11/2015, 3:55:53 PM GMT-2:00
.