Wie schafft es das Datum von Coreutil, solch seltsame Ergebnisse zu erzielen?

Wie schafft es das Datum von Coreutil, solch seltsame Ergebnisse zu erzielen?

Ich habe ein bisschen herumprobiert und dateversucht, 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/timezoneenthält „Europe/Paris“, daher die Verwendung von , TZum 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 datedie letzten drei Ergebnisse zustande gekommen sind. Versteht irgendjemand die Logik hinter diesen Ergebnissen?

Antwort1

Ich denke, es nimmt Ihr + xals Zeitzonenspezifizierer (betrachten Sie es beispielsweise 2013-04-25 19:52:36 +4als 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 UTCFeld 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 Znicht unbedingt auf UTC eingestellt sein.TZ

verwandte Informationen