11 Usando o dateprograma, como posso calcular o número de segundos desde a meia-noite? date Ducky fonte 1 data "+ (% H * 60 +% M) * 60 +% S" | bc groxxda 1 echo $ (($ (date '+ (% H * 60 +% M) * 60 +% S'))) groxxda Respostas: 14 Para evitar condições de corrida, ainda assumindo a data GNU: eval "$(date +'today=%F now=%s')" midnight=$(date -d "$today 0" +%s) echo "$((now - midnight))" Com zsh, você pode fazer isso internamente: zmodload zsh/datetime now=$EPOCHSECONDS strftime -s today %F $now strftime -rs midnight %F $today echo $((now - midnight)) De maneira portável, em fusos horários em que não há opção de horário de verão, você pode: IFS=: set -- $(date +%T) echo "$((${1#0} * 3600 + ${2#0} * 60 + ${3#0}))" A ${X#0}é para descascar principais 0s que em alguns escudos como bash, dashe poshcausam problemas com 09(onde o shell reclama sobre ele ser um número octal inválido). Stéphane Chazelas fonte Muito inteligente e bom uso de eval Ulrich Dangel Eu prefiro usar algo nesse sentido:IFS=: read -r today now <<< $(date +%F:%s); midnight=$(date -d "$today 0" +%s); echo $(( now - midnight )) x-yuri 7 Não há necessidade de expressão aritmética, basta usar data pura: date -d "1970-01-01 UTC $(date +%T)" +%s Ipor Sircer fonte Ótima resposta, deve ser a primeira. Leopoldo Sanczyk 28/03/19 1 No Mac brew install coreutilse substitua dateporgdate Connor McCormick 2 Com base no bash, obtenha o tempo atual em milissegundos desde a meia-noite , em um sistema GNU, isso pode ser feito da seguinte maneira: $ now=$(date '+%s') $ midnight=$(date -d 'today 00:00:00' '+%s') $ echo $(( now - midnight )) 53983 fedorqui fonte 2 Você quer ter certeza de que não faz isso às 23:59:59 Stéphane Chazelas E para converter de volta:date -d @$seconds choroba
14 Para evitar condições de corrida, ainda assumindo a data GNU: eval "$(date +'today=%F now=%s')" midnight=$(date -d "$today 0" +%s) echo "$((now - midnight))" Com zsh, você pode fazer isso internamente: zmodload zsh/datetime now=$EPOCHSECONDS strftime -s today %F $now strftime -rs midnight %F $today echo $((now - midnight)) De maneira portável, em fusos horários em que não há opção de horário de verão, você pode: IFS=: set -- $(date +%T) echo "$((${1#0} * 3600 + ${2#0} * 60 + ${3#0}))" A ${X#0}é para descascar principais 0s que em alguns escudos como bash, dashe poshcausam problemas com 09(onde o shell reclama sobre ele ser um número octal inválido). Stéphane Chazelas fonte Muito inteligente e bom uso de eval Ulrich Dangel Eu prefiro usar algo nesse sentido:IFS=: read -r today now <<< $(date +%F:%s); midnight=$(date -d "$today 0" +%s); echo $(( now - midnight )) x-yuri 7 Não há necessidade de expressão aritmética, basta usar data pura: date -d "1970-01-01 UTC $(date +%T)" +%s Ipor Sircer fonte Ótima resposta, deve ser a primeira. Leopoldo Sanczyk 28/03/19 1 No Mac brew install coreutilse substitua dateporgdate Connor McCormick 2 Com base no bash, obtenha o tempo atual em milissegundos desde a meia-noite , em um sistema GNU, isso pode ser feito da seguinte maneira: $ now=$(date '+%s') $ midnight=$(date -d 'today 00:00:00' '+%s') $ echo $(( now - midnight )) 53983 fedorqui fonte 2 Você quer ter certeza de que não faz isso às 23:59:59 Stéphane Chazelas E para converter de volta:date -d @$seconds choroba
7 Não há necessidade de expressão aritmética, basta usar data pura: date -d "1970-01-01 UTC $(date +%T)" +%s Ipor Sircer fonte Ótima resposta, deve ser a primeira. Leopoldo Sanczyk 28/03/19 1 No Mac brew install coreutilse substitua dateporgdate Connor McCormick 2 Com base no bash, obtenha o tempo atual em milissegundos desde a meia-noite , em um sistema GNU, isso pode ser feito da seguinte maneira: $ now=$(date '+%s') $ midnight=$(date -d 'today 00:00:00' '+%s') $ echo $(( now - midnight )) 53983 fedorqui fonte 2 Você quer ter certeza de que não faz isso às 23:59:59 Stéphane Chazelas E para converter de volta:date -d @$seconds choroba
2 Com base no bash, obtenha o tempo atual em milissegundos desde a meia-noite , em um sistema GNU, isso pode ser feito da seguinte maneira: $ now=$(date '+%s') $ midnight=$(date -d 'today 00:00:00' '+%s') $ echo $(( now - midnight )) 53983 fedorqui fonte 2 Você quer ter certeza de que não faz isso às 23:59:59 Stéphane Chazelas E para converter de volta:date -d @$seconds choroba
Respostas:
Para evitar condições de corrida, ainda assumindo a data GNU:
Com
zsh
, você pode fazer isso internamente:De maneira portável, em fusos horários em que não há opção de horário de verão, você pode:
A
${X#0}
é para descascar principais 0s que em alguns escudos comobash
,dash
eposh
causam problemas com09
(onde o shell reclama sobre ele ser um número octal inválido).fonte
IFS=: read -r today now <<< $(date +%F:%s); midnight=$(date -d "$today 0" +%s); echo $(( now - midnight ))
Não há necessidade de expressão aritmética, basta usar data pura:
fonte
brew install coreutils
e substituadate
porgdate
Com base no bash, obtenha o tempo atual em milissegundos desde a meia-noite , em um sistema GNU, isso pode ser feito da seguinte maneira:
fonte
date -d @$seconds