Ich habe mit date
herumgespielt zu versuchen, Ausdrücke wie „2 Stunden“ in eine Anzahl von Sekunden wie 7200 umzuwandeln. Ich dachte, ich könnte dies mit Aufrufen wie:
date -d "1970-01-01 00:00:00 + 2 hours" +"%s"
Dabei bemerkte ich jedoch äußerst seltsame Ergebnisse. (Mein /etc/timezone
enthält „Europa/Paris“, daher die Verwendung von TZ
um UTC-Zeiten zu erzwingen.)
omega:~$ TZ=utc date -d "1970-01-01 00:00:00" +"%s"
0
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 0 minutes" +"%s"
60
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + -1 minutes" +"%s"
3660
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 1 minutes" +"%s"
-3540
Das erste Ergebnis ist vernünftig genug, aber ich bin wirklich total verwirrt darüber, wie date
vielleicht mit den drei letzten Ergebnissen kommen. Versteht jemand die Logik zwischen diesen Ergebnissen?
Akzeptierte Antwort:
Ich denke, es braucht Ihren + x
als Zeitzonenangabe (z. B. 2013-04-25 19:52:36 +4
). ist ein gültiger Zeitstempel in einer Zeitzone, die 4 Stunden vor UTC liegt).
Es sieht dann das Wort „Minuten“ und behandelt es als Synonym für Minute, sodass Sie eine Minute später erhalten.
Wenn Sie einen expliziten Zeitzonenbezeichner eingeben, funktioniert es:
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC" +"%s"
0
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 0 minutes" +"%s"
0
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + -1 minutes" +"%s"
-60
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 1 minutes" +"%s"
60
Beachten Sie die UTC
nach dem Sekundenfeld. Sie können auch ein zweites +0
eingeben :
[email protected]:~$ TZ=utc date -d "1970-01-01 00:00:00 +0 + -1 minutes" +"%s"
-60
… aber zumindest persönlich ist das viel schwerer zu lesen.
Oder Sie können ein Z
setzen nach den Sekunden usw. Den TZ
braucht man eigentlich nicht Umgebungsvariable, die in den obigen Beispielen auf UTC gesetzt werden soll.