Eu preciso de algo simples como date
, mas em segundos desde 1970, em vez da data, horas, minutos e segundos atuais.
date
parece não oferecer essa opção. Existe uma maneira fácil?
Eu preciso de algo simples como date
, mas em segundos desde 1970, em vez da data, horas, minutos e segundos atuais.
date
parece não oferecer essa opção. Existe uma maneira fácil?
Respostas:
Isso deve funcionar:
date +%s
%s seconds since 1970-01-01 00:00:00 UTC
para %s seconds since the epoch, 1970-01-01 00:00:00 UTC
porque eu perdi lá.
date
não está embutido bash
, portanto sua versão bash
não tem nada a ver com a date
implementação do sistema.
date +%s.%N
date +%s%3N
Apenas para adicionar.
Obtenha os segundos desde a época (1º de janeiro de 1970) para qualquer data (por exemplo, 21 de outubro de 1973).
date -d "Oct 21 1973" +%s
Converta o número de segundos de volta à data
date --date @120024000
O comando date
é bastante versátil. Outra coisa legal que você pode fazer com a data (copiado descaradamente date --help
). Mostrar a hora local para as 9:00 da próxima sexta-feira na costa oeste dos EUA
date --date='TZ="America/Los_Angeles" 09:00 next Fri'
Melhor ainda, leia a página de manual http://man7.org/linux/man-pages/man1/date.1.html
date
ou porque estou usando zsh
(macOS Catalina), mas isso não funciona para mim. Execução de $ date -d "Oct 21 1973" +%s
saídasusage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
Até agora, todas as respostas usam o programa externo date
.
Desde o Bash 4.2, printf
há um novo modificador %(dateformat)T
que, quando usado com argumento, -1
gera a data atual com o formato fornecido por dateformat
, manipulado por strftime(3)
(man 3 strftime
para obter informações sobre os formatos).
Portanto, para uma solução Bash pura:
printf '%(%s)T\n' -1
ou se você precisar armazenar o resultado em uma variável var
:
printf -v var '%(%s)T' -1
Sem programas externos e sem sub-conchas!
Desde o Bash 4.3, ainda é possível não especificar o -1
:
printf -v var '%(%s)T'
(mas pode ser mais sensato sempre apresentar o argumento -1
).
Se você usar -2
como argumento em vez de -1
, o Bash usará a hora em que o shell foi iniciado, em vez da data atual. Isso pode ser usado para calcular tempos decorridos
$ printf -v beg '%(%s)T\n' -2
$ printf -v now '%(%s)T\n' -1
$ echo beg=$beg now=$now elapsed=$((now-beg))
beg=1583949610 now=1583953032 elapsed=3422
-2
no caso de ter uma tarefa em execução mais longa (pense em um script para controlar seus backups) e enviar um email no final "O backup foi iniciado em $ em vez de concluído em $ now" - o que pode ser feito para -2
evitar o armazenamento de um backup. variável dedicada no início.
Com a maioria das implementações do Awk:
awk 'BEGIN {srand(); print srand()}'
srand()
geralmente são propagadas com a data / hora atual. A segunda chamada para srand()
retorna o valor usado anteriormente como a semente.
Desde o bash
5.0 ( lançado em 7 de janeiro de 2019 ), você pode usar a variável incorporada EPOCHSECONDS
.
$ echo $EPOCHSECONDS
1547624774
Há também o EPOCHREALTIME
que inclui frações de segundos.
$ echo $EPOCHREALTIME
1547624774.371215
EPOCHREALTIME
pode ser convertido em microssegundos (μs) removendo o ponto decimal. Isso pode ser interessante ao usar bash
a aritmética incorporada (( expression ))
que pode lidar apenas com números inteiros.
$ echo ${EPOCHREALTIME/./}
1547624774371215
Em todos os exemplos acima, os valores do tempo impresso são iguais para melhor legibilidade. Na realidade, os valores de tempo diferem, pois cada comando leva uma pequena quantidade de tempo para ser executado.
date +%s%3N
) você pode usarecho $(( ${EPOCHREALTIME/./} / 1000 ))
Esta é uma extensão do que o @pellucide fez, mas para Macs:
Para determinar o número de segundos desde a época (1º de janeiro de 1970) para qualquer data (por exemplo, 21 de outubro de 1973)
$ date -j -f "%b %d %Y %T" "Oct 21 1973 00:00:00" "+%s"
120034800
Observe que, para completar, eu adicionei a parte do tempo ao formato. O motivo é que date
ele pega qualquer parte da data que você deu e adiciona o atual hora ao valor fornecido. Por exemplo, se você executar o comando acima às 16h19, sem a parte '00: 00: 00 ', ele adicionará a hora automaticamente. Tal que "21 de outubro de 1973" será analisado como "21 de outubro de 1973 16:19:00". Isso pode não ser o que você deseja.
Para converter seu carimbo de data e hora em uma data:
$ date -j -r 120034800
Sun Oct 21 00:00:00 PDT 1973
Página man da Apple para a implementação da data: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/date.1.html
date
comando do BSD , enquanto quaisquer soluções sugeridas date -d
são para o GNU date
. A data do BSD no macOS vem do FreeBSD e compartilha várias opções com o NetBSD e o OpenBSD. E isso é totalmente separado do bash.
%N
opção mencionada por segundos fracionários na data do gnu está ausente na data do MacOS. Na versão 10.14, nenhum dos formatos está na página do manual; eles estão na strftime(3)
página do manual, que você não terá se não tiver o Xcode instalado e poderá não ver com o comando man, mesmo que tenha.