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

Berechnen Sie die Tage seit dem 1.1.1970

Lösung 1:

ring0 hat mich um ein paar Sekunden geschlagen, aber der vollständige Befehl lautet:

echo $(($(date --utc --date "$1" +%s)/86400))

Dies geht nach UTC-Zeit. Ergebnis:

[email protected]:~# echo $((`date --utc --date "$1" +%s`/86400))
14984

Ein kurzer Check mit WolframAlpha zeigt, dass dies der richtige Wert ist.

Lösung 2:

Ich denke, das ist die einfachste Methode:

expr $(date +%s) / 86400

Lösung 3:

Der date Befehl kann Ihnen die Anzahl der Sekunden seit 1970-01-01 00:00:00 UTC geben .

  date +"%s"

Sie können das Ergebnis durch 3600*24 teilen um die Anzahl der Tage (UTC) zu erhalten.

Z.B. in Bash

  x=`date +"%s"` ; echo $(( $x / 3600 / 24 ))

um die Anzahl der Tage anzuzeigen.

Lösung 4:

Ich musste dies auch lösen, aber ich wollte den gleichen Wert für den Tag # unabhängig von der Tageszeit erhalten. Bei Ansätzen wie den hier gezeigten ändert sich der Wert um Mitternacht UTC statt um Mitternacht Ortszeit. Dies scheint wahrscheinlich weniger ein Problem in der EU oder an der US-Ostküste zu sein, die nahe genug an der UTC liegen, dass sich der Tageswert nicht in der Mitte eines typischen Arbeitstages ändert, aber z. B. in Kalifornien zum Tageswechsel würde um 16:00 Uhr PST auftreten, was unpraktisch sein könnte. Ich kann mir vorstellen, dass Australier sich besonders darüber ärgern würden, wenn sich der Tageswert am späten Vormittag ändert.

Wenn wir das korrigieren wollen, müssen wir den Offset von UTC hinzufügen, bevor wir durch Sekunden/Tag dividieren. Glücklicherweise enthält der Linux-Datumsbefehl ein %z Formatsequenz, die den Offset von UTC meldet. Während das Standardformat (dieses Ergebnis gilt für Denver-Zeit, MDT):

$ date +%z
-0600

. . . nicht direkt in einer Berechnung verwendbar ist, liefern die richtigen Modifikatoren das, was wir wollen:

$ date +%-:::z
-6

Wenn man das mit den üblichen Umrechnungen in Sekunden/Stunden/Tage zusammenfasst, sollte Folgendes meiner Meinung nach die Tage seit dem 1.1.1970 ausgeben, wobei der 1.1.1970 selbst Tag Null ist und der Wert um Mitternacht Ortszeit inkrementiert wird:

echo $(( ( $(date +"%s + ( %-:::z * 3600)") ) / 86400 ))

Diese einfache Berechnung funktioniert nicht für Zeitzonen, die nicht um ganze Stunden von UTC versetzt sind (z. B. Indien, TZ=Asien/Kolkata), da „+5:30“ von date +%-:::z erzeugt wird wird einen "ungültiges Zeichen im Ausdruck"-Fehler erzeugen, wenn es in der obigen Anweisung verwendet wird.


Linux
  1. Installieren Sie LibreOffice 3.5 auf CentOS 6.2/6.1/6.0 / CentOS 5.7

  2. So installieren Sie NetBeans IDE 7.1 unter CentOS 6.2/6.1/6.0 / CentOS 5.7

  3. Datumsunterschiede schnell berechnen?

  4. Arbeiten mit Spalten – Awk und Sed?

  5. Upgrade auf das spezifische Php 7.1/7.2 von Php 7.0 in Ubuntu 16.04?

Datumsbefehl in Linux

7 Beispiele für Datumsbefehle in Linux

Ubuntu 22.10 Codename &Veröffentlichungsdatum

Konvertieren Sie ein ISO-Datum in Sekunden seit der Epoche in Linux Bash

Datumsvergleich in Bash

Löschen von Dateien, die älter als 30 Tage sind, basierend auf dem Dateinamen als Datum