Ich habe ein bisschen herumprobiert und date
versucht, Ausdrücke wie „2 Stunden“ in eine Sekundenzahl wie 7200 umzuwandeln. Ich dachte, ich könnte das mit Aufrufen wie diesen erreichen:
date -d "1970-01-01 00:00:00 + 2 hours" +"%s"
Dabei sind mir jedoch äußerst merkwürdige Ergebnisse aufgefallen. (Meins /etc/timezone
enthält „Europe/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 einigermaßen vernünftig, aber ich bin wirklich völlig verwirrt, wie date
die letzten drei Ergebnisse zustande gekommen sind. Versteht irgendjemand die Logik hinter diesen Ergebnissen?
Antwort1
Ich denke, es nimmt Ihr + x
als Zeitzonenspezifizierer (betrachten Sie es beispielsweise 2013-04-25 19:52:36 +4
als einen gültigen Zeitstempel in einer Zeitzone, die 4 Stunden vor UTC liegt).
Das System erkennt dann das Wort „Minuten“ und behandelt es als Synonym für „Minute“, sodass Ihnen später eine Minute angezeigt wird.
Wenn Sie einen expliziten Zeitzonenbezeichner eingeben, funktioniert es:
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC" +"%s"
0
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 0 minutes" +"%s"
0
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + -1 minutes" +"%s"
-60
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 1 minutes" +"%s"
60
Beachten Sie das UTC
Feld nach den Sekunden. Sie können auch eine Sekunde eingeben +0
:
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 +0 + -1 minutes" +"%s"
-60
... aber das ist zumindest für mich persönlich viel schwieriger zu lesen.
Oder Sie setzen ein nach den Sekunden usw. In den obigen Beispielen muss die Umgebungsvariable Z
nicht unbedingt auf UTC eingestellt sein.TZ