¿Cómo encuentro segundos desde la medianoche?


11

Usando el dateprograma, ¿cómo puedo calcular la cantidad de segundos desde la medianoche?


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).


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

Gran respuesta, debería ser la mejor.
Leopoldo Sanczyk

1
En Mac brew install coreutilsy reemplazar datecongdate
Connor McCormick

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.