11 Usando el dateprograma, ¿cómo puedo calcular la cantidad de segundos desde la medianoche? date Cariño fuente 1 fecha "+ (% H * 60 +% M) * 60 +% S" | bc groxxda 1 echo $ (($ (fecha '+ (% H * 60 +% M) * 60 +% S'))) groxxda Respuestas: 14 Para evitar condiciones de carrera, aún asumiendo la fecha GNU: eval "$(date +'today=%F now=%s')" midnight=$(date -d "$today 0" +%s) echo "$((now - midnight))" Con zsh, puedes hacerlo internamente: zmodload zsh/datetime now=$EPOCHSECONDS strftime -s today %F $now strftime -rs midnight %F $today echo $((now - midnight)) Portablemente, en zonas horarias donde no hay un interruptor de horario de verano, puede hacer: IFS=: set -- $(date +%T) echo "$((${1#0} * 3600 + ${2#0} * 60 + ${3#0}))" El ${X#0}es despojar 0s principales que en algunos cáscaras como bash, dashy poshcausan problemas con 09(donde la cáscara se queja acerca de que sea un número octal válido). Stéphane Chazelas fuente Muy inteligente y buen uso de eval Ulrich Dangel Prefiero usar algo en este sentido:IFS=: read -r today now <<< $(date +%F:%s); midnight=$(date -d "$today 0" +%s); echo $(( now - midnight )) x-yuri 7 No hay necesidad de ninguna expresión aritmética, solo use fecha pura: date -d "1970-01-01 UTC $(date +%T)" +%s Ipor Sircer fuente Gran respuesta, debería ser la mejor. Leopoldo Sanczyk 1 En Mac brew install coreutilsy reemplazar datecongdate Connor McCormick 2 Basado en bash, obtenga la hora actual en milisegundos desde la medianoche , en un sistema GNU, se puede hacer así: $ now=$(date '+%s') $ midnight=$(date -d 'today 00:00:00' '+%s') $ echo $(( now - midnight )) 53983 fedorqui fuente 2 Quiere asegurarse de no hacer eso a las 23:59:59 Stéphane Chazelas Y para volver a convertir:date -d @$seconds choroba
14 Para evitar condiciones de carrera, aún asumiendo la fecha GNU: eval "$(date +'today=%F now=%s')" midnight=$(date -d "$today 0" +%s) echo "$((now - midnight))" Con zsh, puedes hacerlo internamente: zmodload zsh/datetime now=$EPOCHSECONDS strftime -s today %F $now strftime -rs midnight %F $today echo $((now - midnight)) Portablemente, en zonas horarias donde no hay un interruptor de horario de verano, puede hacer: IFS=: set -- $(date +%T) echo "$((${1#0} * 3600 + ${2#0} * 60 + ${3#0}))" El ${X#0}es despojar 0s principales que en algunos cáscaras como bash, dashy poshcausan problemas con 09(donde la cáscara se queja acerca de que sea un número octal válido). Stéphane Chazelas fuente Muy inteligente y buen uso de eval Ulrich Dangel Prefiero usar algo en este sentido:IFS=: read -r today now <<< $(date +%F:%s); midnight=$(date -d "$today 0" +%s); echo $(( now - midnight )) x-yuri 7 No hay necesidad de ninguna expresión aritmética, solo use fecha pura: date -d "1970-01-01 UTC $(date +%T)" +%s Ipor Sircer fuente Gran respuesta, debería ser la mejor. Leopoldo Sanczyk 1 En Mac brew install coreutilsy reemplazar datecongdate Connor McCormick 2 Basado en bash, obtenga la hora actual en milisegundos desde la medianoche , en un sistema GNU, se puede hacer así: $ now=$(date '+%s') $ midnight=$(date -d 'today 00:00:00' '+%s') $ echo $(( now - midnight )) 53983 fedorqui fuente 2 Quiere asegurarse de no hacer eso a las 23:59:59 Stéphane Chazelas Y para volver a convertir:date -d @$seconds choroba
7 No hay necesidad de ninguna expresión aritmética, solo use fecha pura: date -d "1970-01-01 UTC $(date +%T)" +%s Ipor Sircer fuente Gran respuesta, debería ser la mejor. Leopoldo Sanczyk 1 En Mac brew install coreutilsy reemplazar datecongdate Connor McCormick 2 Basado en bash, obtenga la hora actual en milisegundos desde la medianoche , en un sistema GNU, se puede hacer así: $ now=$(date '+%s') $ midnight=$(date -d 'today 00:00:00' '+%s') $ echo $(( now - midnight )) 53983 fedorqui fuente 2 Quiere asegurarse de no hacer eso a las 23:59:59 Stéphane Chazelas Y para volver a convertir:date -d @$seconds choroba
2 Basado en bash, obtenga la hora actual en milisegundos desde la medianoche , en un sistema GNU, se puede hacer así: $ now=$(date '+%s') $ midnight=$(date -d 'today 00:00:00' '+%s') $ echo $(( now - midnight )) 53983 fedorqui fuente 2 Quiere asegurarse de no hacer eso a las 23:59:59 Stéphane Chazelas Y para volver a convertir:date -d @$seconds choroba
Respuestas:
Para evitar condiciones de carrera, aún asumiendo la fecha GNU:
Con
zsh
, puedes hacerlo internamente:Portablemente, en zonas horarias donde no hay un interruptor de horario de verano, puede hacer:
El
${X#0}
es despojar 0s principales que en algunos cáscaras comobash
,dash
yposh
causan problemas con09
(donde la cáscara se queja acerca de que sea un número octal válido).fuente
IFS=: read -r today now <<< $(date +%F:%s); midnight=$(date -d "$today 0" +%s); echo $(( now - midnight ))
No hay necesidad de ninguna expresión aritmética, solo use fecha pura:
fuente
brew install coreutils
y reemplazardate
congdate
Basado en bash, obtenga la hora actual en milisegundos desde la medianoche , en un sistema GNU, se puede hacer así:
fuente
date -d @$seconds