Wie finde ich Sekunden seit Mitternacht?


11

dateWie kann ich mit dem Programm die Anzahl der Sekunden seit Mitternacht berechnen?


1
Datum "+ (% H * 60 +% M) * 60 +% S" | bc
groxxda

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

Antworten:


14

Um Rennbedingungen zu vermeiden, wird weiterhin das GNU-Datum angenommen:

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

Mit zshkönnen Sie es intern tun:

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

In Zeitzonen, in denen es keinen Sommerzeitschalter gibt, können Sie Folgendes tun:

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

Das ${X#0}ist führenden 0s abzustreifen , die in einigen Muscheln mag bash, dashund poshverursachen Probleme mit 09(wo die Schale beklagt sich über sie eine ungültige Oktalzahl wird).


Sehr kluger und guter Gebrauch von eval
Ulrich Dangel

Ich würde lieber etwas in diese Richtung verwenden:IFS=: read -r today now <<< $(date +%F:%s); midnight=$(date -d "$today 0" +%s); echo $(( now - midnight ))
x-yuri

7

Es ist kein arithmetischer Ausdruck erforderlich. Verwenden Sie einfach das reine Datum:

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

Tolle Antwort, sollte die beste sein.
Leopoldo Sanczyk

1
Auf Mac brew install coreutilsund ersetzen datedurchgdate
Connor McCormick

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.