GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie schafft es Coreutils Datum, solche seltsamen Ergebnisse zu erzielen?

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:

ausführen
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.


Linux
  1. So überprüfen Sie die Zeitzone in Linux

  2. Wie bekomme ich nur Dateien, die nach einem Date mit Ls erstellt wurden?

  3. So erhalten Sie eine formatierte Datumszeit in Python

  4. Wie bekomme ich ps zur Druckgruppe?

  5. Wie erhalte ich das Ablaufdatum des Benutzerkennworts aus Active Directory?

So erhalten Sie das aktuelle Datum und die aktuelle Uhrzeit in Python

So erhalten Sie das aktuelle Datum und die Uhrzeit in JavaScript

Wie bekomme ich die Uhr dazu, das Datum anzuzeigen?

Wie startet PulseAudio?

Wie sortiere ich die Ergebnisse von Find Statement nach Datum?

Wie weist Linux Bandbreite zwischen Prozessen zu?