Desculpe, devo dizer isso ... '' Data parece não oferecer essa opção. Existe uma maneira fácil '' -? Ler o novo manual do ;-)
TheBonsai
7
Algumas versões da data possuem e outras não. Portanto, nem sempre está presente. Corri 'type -a date' e usei uma versão diferente e que funcionou.
Scott Rowley
1
FWIW, o Ubuntu tem apenas / bin / data, para o qual @ obras resposta do Steef
Jonathan Hartley
1
@TheBonsai que não faz parte da versão padrão POSIX da ferramenta 'date'. Só porque sua versão possui (provavelmente o GNU), você não deve assumir que as implementações de todos o fazem.
a data manpge deve ser alterada de %s seconds since 1970-01-01 00:00:00 UTCpara %s seconds since the epoch, 1970-01-01 00:00:00 UTCporque eu perdi lá.
Devin
3
Não funciona para mim. data do homem não mostra% s. Eu devo ter uma versão muito antiga do bash (3.2.51 (1) para Solaris)?
precisa saber é o seguinte
7
O @ livefree75 datenão está embutido bash, portanto sua versão bashnão tem nada a ver com a dateimplementação do sistema.
Adrian Frühwirth
11
E se você quiser as frações de segundo, com nove casas decimais, use:date +%s.%N
Jonathan Hartley
19
Para milissegundos de usodate +%s%3N
Juan Campa 12/12
133
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'
Esta não é a pergunta do OP, mas responde à minha, então +1 de mim.
AnthonyD973 9/02/19
Talvez seja a versão dateou porque estou usando zsh(macOS Catalina), mas isso não funciona para mim. Execução de $ date -d "Oct 21 1973" +%ssaídasusage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
Joshua Pinter
43
Até agora, todas as respostas usam o programa externo date .
Desde o Bash 4.2, printfhá um novo modificador %(dateformat)Tque, quando usado com argumento, -1gera 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 -2como 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
Você deseja usar -2no 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 -2evitar o armazenamento de um backup. variável dedicada no início.
Uau, tive que ir procurar este aqui. Esta é uma solução pragmática, mas não necessariamente boa / portátil. Parece que as implementações do awksrand() geralmente são propagadas com a data / hora atual. A segunda chamada para srand()retorna o valor usado anteriormente como a semente.
Há também o EPOCHREALTIMEque inclui frações de segundos.
$ echo $EPOCHREALTIME
1547624774.371215
EPOCHREALTIMEpode ser convertido em microssegundos (μs) removendo o ponto decimal. Isso pode ser interessante ao usar basha 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.
Observe que, para completar, eu adicionei a parte do tempo ao formato. O motivo é que dateele 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:
Para deixar claro, isso é para o datecomando do BSD , enquanto quaisquer soluções sugeridas date -dsã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.
precisa saber é
a %Nopçã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.
Dan Pritts
1
use este script bash (meu ~/bin/epoch):
#!/bin/bash# get seconds since epoch
test "x$1"== x && date +%s && exit 0# or convert epoch seconds to date format (see "man date" for options)
EPOCH="$1"
shift
date -d @"$EPOCH""$@"
Respostas:
Isso deve funcionar:
fonte
%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á embutidobash
, portanto sua versãobash
não tem nada a ver com adate
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).
Converta o número de segundos de volta à data
O comando
date
é bastante versátil. Outra coisa legal que você pode fazer com a data (copiado descaradamentedate --help
). Mostrar a hora local para as 9:00 da próxima sexta-feira na costa oeste dos EUAMelhor ainda, leia a página de manual http://man7.org/linux/man-pages/man1/date.1.html
fonte
date
ou porque estou usandozsh
(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 pordateformat
, manipulado porstrftime(3)
(man 3 strftime
para obter informações sobre os formatos).Portanto, para uma solução Bash pura:
ou se você precisar armazenar o resultado em uma variável
var
:Sem programas externos e sem sub-conchas!
Desde o Bash 4.3, ainda é possível não especificar o
-1
:(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 decorridosfonte
-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:
fonte
srand()
geralmente são propagadas com a data / hora atual. A segunda chamada parasrand()
retorna o valor usado anteriormente como a semente.Solução de bash pura
Desde o
bash
5.0 ( lançado em 7 de janeiro de 2019 ), você pode usar a variável incorporadaEPOCHSECONDS
.Há também o
EPOCHREALTIME
que inclui frações de segundos.EPOCHREALTIME
pode ser convertido em microssegundos (μs) removendo o ponto decimal. Isso pode ser interessante ao usarbash
a aritmética incorporada(( expression ))
que pode lidar apenas com números inteiros.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.
fonte
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)
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:
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
fonte
date
comando do BSD , enquanto quaisquer soluções sugeridasdate -d
são para o GNUdate
. 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 nastrftime(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.use este script bash (meu
~/bin/epoch
):fonte