@netvope Nach einer zusätzlichen Schaltsekunde wird die Unix-Zeit erneut um eins zurückgesetzt. Jeder Tag fügt also genau 86400 Unix-Sekunden hinzu. Jedoch 915148800 UNIX Zeit für beide UTC stehen kann 1998-12-31T23: 59: 60 und 1999-01-01T00: 00: 00 en.wikipedia.org/wiki/Unix_time#Leap_seconds
Debilski
9
Der dateBefehl kann Ihnen die Anzahl der Sekunden seitdem geben 1970-01-01 00:00:00 UTC.
date +"%s"
Sie können das Ergebnis durch dividieren 3600*24, um die Anzahl der Tage (UTC) zu erhalten.
Warum wird das abgelehnt? Es ist die beste und kürzeste und einfachste Antwort
Tom Corelis
1
Ich musste das auch lösen, aber ich wollte unabhängig von der Tageszeit den gleichen Wert für den Tag # erhalten. Bei Ansätzen wie den hier gezeigten ändert sich der Wert um Mitternacht UTC anstelle von Mitternacht Ortszeit. Dies scheint wahrscheinlich weniger ein Problem in der EU oder an der Ostküste der USA zu sein, die nahe genug an UTC liegen, dass sich der Tageswert nicht in der Mitte des typischen Arbeitstages ändert, sondern beispielsweise in Kalifornien die Tagesänderung würde um 16 Uhr PST auftreten, was unpraktisch sein könnte. Ich kann mir vorstellen, dass die Australier besonders verärgert wären, wenn sich der Tageswert am späten Morgen ändern würde.
Wenn wir das korrigieren wollen, müssen wir den Versatz von UTC addieren, bevor wir durch Sekunden / Tag dividieren. Glücklicherweise enthält der Linux-Datumsbefehl eine Sequenz im % z- Format, die den Versatz von UTC meldet. Während das Standardformat (dieses Ergebnis ist für Denver Zeit, MDT):
$ date +%z-0600
. . . ist nicht direkt in einer Berechnung verwendbar, die richtigen Modifikatoren ergeben das, was wir wollen:
$ date +%-:::z-6
Kombinieren Sie dies mit den üblichen Sekunden / Stunden / Tagen-Konvertierungen, und ich glaube, dass die Tage seit dem 1.1.1970 wie folgt ausgegeben werden sollten, wobei der 1.1.1970 selbst Tag Null ist und der Wert um Mitternacht Ortszeit erhöht wird:
Diese einfache Berechnung funktioniert nicht für Zeitzonen, die nicht um ganze Stunden von UTC versetzt sind (z. B. Indien, TZ = Asien / Kolkata), da das von erzeugte "+5: 30" date +%-:::zeinen Fehler "Ungültiges Zeichen im Ausdruck" erzeugt wenn in der obigen Aussage verwendet.
$()
wird aus Gründen der Lesbarkeit und aus anderen Gründen Backticks vorgezogen .echo $(( $(date ...) / 86400 ))
Antworten:
ring0 hat mich ein paar Sekunden geschlagen, aber der vollständige Befehl lautet:
Dies läuft nach UTC-Zeit. Ergebnis:
Eine schnelle Überprüfung mit WolframAlpha zeigt, dass dies der richtige Wert ist.
quelle
Der
date
Befehl kann Ihnen die Anzahl der Sekunden seitdem geben1970-01-01 00:00:00 UTC
.Sie können das Ergebnis durch dividieren
3600*24
, um die Anzahl der Tage (UTC) zu erhalten.ZB in Bash
um die Anzahl der Tage anzuzeigen.
quelle
Ich denke, das ist die einfachste Methode:
quelle
Ich musste das auch lösen, aber ich wollte unabhängig von der Tageszeit den gleichen Wert für den Tag # erhalten. Bei Ansätzen wie den hier gezeigten ändert sich der Wert um Mitternacht UTC anstelle von Mitternacht Ortszeit. Dies scheint wahrscheinlich weniger ein Problem in der EU oder an der Ostküste der USA zu sein, die nahe genug an UTC liegen, dass sich der Tageswert nicht in der Mitte des typischen Arbeitstages ändert, sondern beispielsweise in Kalifornien die Tagesänderung würde um 16 Uhr PST auftreten, was unpraktisch sein könnte. Ich kann mir vorstellen, dass die Australier besonders verärgert wären, wenn sich der Tageswert am späten Morgen ändern würde.
Wenn wir das korrigieren wollen, müssen wir den Versatz von UTC addieren, bevor wir durch Sekunden / Tag dividieren. Glücklicherweise enthält der Linux-Datumsbefehl eine Sequenz im % z- Format, die den Versatz von UTC meldet. Während das Standardformat (dieses Ergebnis ist für Denver Zeit, MDT):
. . . ist nicht direkt in einer Berechnung verwendbar, die richtigen Modifikatoren ergeben das, was wir wollen:
Kombinieren Sie dies mit den üblichen Sekunden / Stunden / Tagen-Konvertierungen, und ich glaube, dass die Tage seit dem 1.1.1970 wie folgt ausgegeben werden sollten, wobei der 1.1.1970 selbst Tag Null ist und der Wert um Mitternacht Ortszeit erhöht wird:
Diese einfache Berechnung funktioniert nicht für Zeitzonen, die nicht um ganze Stunden von UTC versetzt sind (z. B. Indien, TZ = Asien / Kolkata), da das von erzeugte "+5: 30"
date +%-:::z
einen Fehler "Ungültiges Zeichen im Ausdruck" erzeugt wenn in der obigen Aussage verwendet.quelle