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.