Jak znaleźć sekundy od północy?


11

Za pomocą dateprogramu, jak mogę obliczyć liczbę sekund od północy?


1
data „+ (% H * 60 +% M) * 60 +% S” | bc
groxxda

1
echo $ (($ (data '+ (% H * 60 +% M) * 60 +% S')))
groxxda

Odpowiedzi:


14

Aby uniknąć warunków wyścigu, nadal zakładając datę GNU:

eval "$(date +'today=%F now=%s')"
midnight=$(date -d "$today 0" +%s)
echo "$((now - midnight))"

Dzięki zshmożesz to zrobić wewnętrznie:

zmodload zsh/datetime
now=$EPOCHSECONDS
strftime -s today %F $now
strftime -rs midnight %F $today
echo $((now - midnight))

Przenośnie, w strefach czasowych, w których nie ma przełącznika czasu letniego, możesz:

IFS=:
set -- $(date +%T)
echo "$((${1#0} * 3600 + ${2#0} * 60 + ${3#0}))"

${X#0}Jest taśmy prowadzące 0s w niektórych muszli jak bash, dashi poshpowodują problemy z 09(gdzie powłoka uskarża się, że był nieprawidłowy numer ósemkowa).


Bardzo sprytne i dobre wykorzystanie eval
Ulrich Dangel

Wolałbym użyć czegoś w ten sposób:IFS=: read -r today now <<< $(date +%F:%s); midnight=$(date -d "$today 0" +%s); echo $(( now - midnight ))
x-yuri

7

Nie ma potrzeby używania wyrażeń arytmetycznych, wystarczy użyć czystej daty:

date -d "1970-01-01 UTC $(date +%T)" +%s

Świetna odpowiedź, powinna być najwyższa.
Leopoldo Sanczyk

1
Na Mac brew install coreutilsi wymienić datezgdate
Connor McCormick

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.