Wie finde ich Sekunden seit Mitternacht?

11

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

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

Stéphane Chazelas
quelle
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
Ipor Sircer
quelle
Tolle Antwort, sollte die beste sein.
Leopoldo Sanczyk
1
Auf Mac brew install coreutilsund ersetzen datedurchgdate
Connor McCormick
2

Basierend auf Bash kann die aktuelle Zeit in Millisekunden seit Mitternacht auf einem GNU-System wie folgt ausgeführt werden:

$ now=$(date '+%s')
$ midnight=$(date -d 'today 00:00:00' '+%s')
$ echo $(( now - midnight ))
53983
fedorqui
quelle
2
Sie wollen sicherstellen, dass Sie das nicht um 23:59:59 tun
Stéphane Chazelas
Und um zurück zu konvertieren:date -d @$seconds
Choroba