So finden Sie die Zeitdifferenz in Unix-Skript

September 18

Benötigen Sie die Abweichung zwischen zwei Mal, ob sie nur ein paar Sekunden oder durch Jahre unterscheiden, können Sie in der GNU-Version von Unix mit der "Datum" Befehl dazu. Das Verfahren ist jedoch nicht intuitiv, wie das Datum, den Befehl nicht direkt eine Flagge oder ein Argument für dieses Verfahren bietet. Darüber hinaus existieren mehrere Versionen des Befehls Datum in Unix. Beachten Sie, dass was in die GNU-Version des Befehls Datum funktioniert nicht mit der BSD-Version funktionieren.

UNIX-Epoche

Die Schlüssel zur Lösung dieses Problems ist verstehen, wie der Computer tatsächlich hält verfolgen Zeit der. Ein Unix-Computer speichert alle Zeiten als die Anzahl der Sekunden, die seit Beginn der Unix-Epoche verstrichen sind. Der Unix-Epoche ist Mitternacht des 1. Januar 1970.

Immer die Sekunden seit der Unix-Epoche

Kann man die Anzahl der Sekunden seit der Unix-Epoche zu einem bestimmten Zeitpunkt mit einer Kombination aus der "+ %s" Flagge und die "--Datum" Befehl. Geben Sie Folgendes in eine Shell für die Anzahl der Sekunden von der Unix-Epoche zu 11. März 2011 erhalten:

Datum--Datum 2011-03-11 + %s

Das Ergebnis wird sein: 1299823200. Jedem Datum-Uhrzeit-Format können mit dem Befehl "Datum" in diesem Skript analysiert werden kann. Sie können Ihre Shell über die gültige Datumsformate zu lesen "Mann Datum" eingeben.

Die Lösung

Du kannst alle angegebenen Datum oder Zeit zu, in einem Unix-kompatiblen Format nehmen und konvertieren Sie sie in den Sekunden vor oder seit Beginn der Unix-Epoche, finden Sie den Unterschied zwischen jeder zwei Mal durch die Ergebnisse von zwei dieser Befehle subtrahieren.

Geben Sie die folgenden Befehle in der Kommandozeile:

D1 =date --date 2011-03-11 +%s

D2 =date --date 2010-05-12 +%s

Echo "$(((d1-d2))) Sekunden Differenz"

In den ersten beiden Zeilen die "Zeichen ist kein Anführungszeichen. Es ist ein Rücken-Tick. Sie finden dieses Zeichen links neben der Taste "1" auf einer US-Standardtastatur.

Die Ausgabe sollte der Unterschied zwischen den beiden Zeitangaben in Sekunden. Wenn Sie benötigen, können Sie dies in Minuten, Stunden, Tage, und so weiter konvertieren durch Division durch die Anzahl der Sekunden in einer Minute, Minuten in einer Stunde oder Stunden an einem Tag.

Ein Skript

Wie wäre es ein Ärgernis diese drei lange Befehle jedes Mal eingeben, sollten Sie es in ein Script Kapseln. Öffnen Sie einen Texteditor und fügen Sie den folgenden:

! / Usr/bin/Env bash D1 =date --date $1 +%s

D2 =date --date $2 +%s

Echo "$(((d1-d2))) Sekunden Differenz"

Ein paar Dinge geändert. Die obere Zeile ermöglicht die aktuelle Shell, die wissen, dass Sie dieses Skript für die Verwendung die Sprache der Shell "Bash" schreiben. Wie Sie die Termine in den beiden ersetzen Datum-Befehle mit "$1" und "$2", Sie können neue Termine an übergeben das Skript jedes Mal, wenn Sie sie ausführen. Wieder einmal in die ersten beiden Zeilen verwenden Sie die Rücken-Tick ", kein einfaches Anführungszeichen.

Speichern Sie Ihr Skript mit dem Namen "timediff.sh" und führen Sie den Befehl "Chmod + x timediff.sh" in der Shell lassen Unix wissen, dass es dies als ein Skript ausführen darf.

Nachdem Sie dies tun, finden Sie durch Eingabe den Unterschied zwischen zwei Datumsangaben und Zeiten:

./timediff.sh 2010-9-13 1981-1-14