Wenn Sie den Unterschied zwischen zwei Zeiten zu finden , ob sie nur ein paar Sekunden oder nach Jahren unterscheiden müssen, können Sie diese in der GNU-Version von Unix zu tun mit dem "date "-Befehl. Allerdings ist das Verfahren nicht intuitiv , wie der Befehl date nicht direkt eine Fahne oder ein Argument für dieses Verfahren. Darüber hinaus existieren mehrere Versionen des Befehls date in Unix. Beachten Sie, dass , was funktioniert in der GNU-Version des Befehls date wird nicht mit der BSD-Version arbeiten. Unix Epoch
Der Schlüssel zur Lösung dieses Problems ist das Verständnis , wie der Computer tatsächlich verfolgt der Zeit. Ein Unix- Computer speichert alle Zeiten als die Anzahl der Sekunden , die seit der Unix-Epoche vergangen sind. Die Unix-Epoche ist Mitternacht des 1. Januar 1970 .
Getting die Sekunden seit der Unix-Epoche
Sie die Anzahl der Sekunden seit der Unix-Epoche können zu einem gegebenen Datum mit einer Kombination aus dem "+ % s" Flagge und dem " - date "-Befehl. Geben Sie Folgendes in einer Schale , die Anzahl der Sekunden von der Unix-Epoche erhalten bis 11. März 2011:
- Datum 2011-03-11 + % s
Das Ergebnis wird sein : 1299823200 . Sie können eine beliebige Datum-Zeit- Format , dass man durch die "date "-Befehl in diesem Skript zu analysieren. Sie können "man date" in der Shell eingeben, um über alle gültiges Datum Formate lesen.
Die Lösung
Wie Sie einem bestimmten Datum oder kann Zeit in einer Unix- kompatibles Format und wandelt es in den Sekunden vor oder seit der Unix-Epoche , können Sie die Differenz zwischen zwei Zeiten durch Subtraktion der Ergebnisse von zwei dieser Befehle finden.
Geben Sie die folgenden Befehle in Ihren Schale:
d1 = `date - Datum 2011-03-11 +% s`
d2 = `date - Datum 2010-05-12 +% s`
< p> echo "$ ((( D1-D2 ))) Sekunden Unterschied "
In den ersten beiden Zeilen , ist die ` Zeichen kein Anführungszeichen . Es ist ein Back- Tick. Sie können diese Zeichen links von der Taste "1" auf einem Standard- US-Tastatur zu finden.
Die Ausgabe sollte der Unterschied zwischen den beiden Zeiten in Sekunden. Wenn Sie brauchen, können Sie diese in Minuten, Stunden , Tage, und so weiter umwandeln , indem man durch die Anzahl der Sekunden in einer Minute , Minuten in einer Stunde oder Stunden an einem Tag .
Ein Script
wäre es ein Ärgernis zu tippen diese drei lange Befehle jedes Mal sein , sollten Sie sie in ein Skript zu kapseln. ! Öffnen Sie Ihren bevorzugten 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 Unterschied "
Dies ändert ein paar Dinge. Die obere Zeile lässt die aktuelle Shell wissen, dass Sie dieses Skript , um die Sprache des "bash " shell verwenden zu schreiben. Wie Sie die Daten in den beiden Datum Befehle ersetzen mit "$ 1" und "$ 2 ", können Sie neue Daten ein, um das Skript übergeben werden jedes Mal, wenn Sie es . Wieder einmal in den ersten beiden Zeilen , verwenden Sie die zurück -tick ` , nicht ein einziges Zitat .
Speichern Sie Ihr Skript mit dem Namen " timediff.sh " und führen Sie den Befehl " chmod + x timediff.sh . " in der Shell zu lassen Unix wissen, dass es die Erlaubnis, dies als ein Skript ausgeführt hat
Nachdem Sie dies tun , können Sie die Differenz zwischen zwei Datumsangaben und Uhrzeiten durch Eingabe von:
. /timediff.sh 2010.09.13 1981.01.14