Palavras-chave: shell, datas, date, awk, unix timestamp, posix time, unix time, unix epoch
Maneiras rápidas de converter de Unix timestamp para um formato mais amigável:
- GNU date
-
date -d '1/1/1970 + 1158857787 seconds' date -d '1/1/1970 + 1158857787 seconds' '+%d/%m/%Y %H:%M:%S %z'
- BSD date
-
date -r 1158857787
- GNU Awk
-
echo 1158857787 | awk '{print strftime("%c",$1)}' awk 'BEGIN {print strftime("%c",1158857787)}' awk 'BEGIN {print strftime("%d/%m/%Y %H:%M:%S %z",1158857787)}'
Para fazer o caminho inverso, a partir de uma data gerar o Unix timestamp:
- GNU e BSD date
-
date +%s # unix timestamp de agora
- GNU date
-
date -d '09/21/2006 13:56:27' +%s # de uma data específica
- GNU Awk
-
awk 'BEGIN {print mktime("2006 09 21 13 56 27")}'
Observação: Você pode ter diferença de algumas horas dependendo do seu timezone.
Nenhum desses comandos funcionou no Solaris…
o date não possui esta opção,
o awk e nawk nao reconhecem mktime nem strftime
o gawk não é distribuído por default.
Haveria alguma outra alternativa, para solaris? Acho que com Perl tem uma opção, que poderia ser incluída nesta lista útil.
Obrigado.
Tem outro jeito:
date -d @1274206474 +%c
Abraço!
O que você está sugerindo são os comandos para tal, que dependem da linguagem utilizada. O legal é construir um algoritmo que funciona para qualquer linguagem e ambiente.
O que deve ser feito é criar algumas tabelas com o número de segundos acumulados
por ano desde 1970, outra por mês, por dia, por hora.
O valor inteiro deve ser pesquisado na tabela e estará entre 2 deles – achou o ano – é o menor.
Faz-se a diferença entre o informado e o encontrado e continua-se a pesquisa nas diversas tabelas, formatando a data até o final.
Eu fiz e funciona!
Abraços.
Se você fez, e funciona, então pode disponibilizar o seu script?
Um abraço.