Om du behöver hitta skillnaden mellan två tider , oavsett om de skiljer sig med endast ett par sekunder eller år , kan du göra detta i GNU version av Unix med " datum " kommandot . Däremot är förfarandet inte intuitivt , eftersom kommandot date inte direkt ger en flagga eller argument för detta förfarande . Dessutom , flera versioner av kommandot date existerar i Unix . Observera att det som fungerar i GNU-versionen av kommandot date fungerar inte med BSD versionen . Unix Epoch
Nyckeln till att lösa detta problem är att förstå hur datorn faktiskt håller reda på tiden . En Unix-dator lagrar alla gånger som det antal sekunder som gått sedan den Unix Epoch . Den Unix Epoch är midnatt den 1 januari 1970.
Få sekunderna Eftersom Unix Epoch
Du kan få antalet sekunder sedan Unix Epoch till en given dag med en kombination av " + % s " flaggan och " - datumet " kommandot . Skriv följande i ett skal för att få antalet sekunder från Unix Epoch till 11 Mars 2011 :
datum - Datum 2011-03-11 + % s
Resultatet blir : 1299823200 . Du kan använda alla datum - tid format som du kan analysera med " datum " -kommandot i det här skriptet . Du kan skriva "man date" i ditt skal för att läsa om alla giltiga datumformat .
Lösningen
Som du kan ta ett visst datum eller tid i ett Unix -kompatibelt format och konvertera det till sekunder innan eller sedan Unix Epoch , kan du se skillnaden mellan två gånger genom att subtrahera resultaten av två av dessa kommandon .
Skriv följande kommandon i din shell :
d1 = ` datum - datum 2011-03-11 + % s `
d2 = ` datum - datum 2010-05-12 + % s `
echo " $ ( ( ( D1-D2 ) ) ) sekunder skillnad "
Under de två första raderna , är det så kallade karaktär inte ett citattecken . Det är en back- fästing. Du kan hitta den här tecknet till vänster om " 1 " knappen på en vanlig amerikanskt tangentbord .
Utgången bör vara skillnaden mellan de två gånger på några sekunder . Om du behöver , kan du omvandla detta till minuter , timmar, dagar, och så vidare genom att dividera med antalet sekunder i en minut , minuter på en timme eller timmar på en dag .
A Script
Eftersom det skulle vara en olägenhet att skriva ut de tre långa kommandon varje gång , bör du kapsla in den i ett manus . ! Öppna din favorit texteditor och klistra in följande :
# /usr /bin /env bash
D1
= ` datum - datum $ 1 + % s `
d2 = ` datum - datum $ 2 + % s `
echo " $ ( ( ( D1-D2 ) ) ) sekunder skillnad "
Detta ändrar några saker . Den översta raden låter det aktuella skalet vet att du skriver detta skript för att använda språket i " bash " shell . När du byter datum på de två datumkommandona med " $ 1" och "$ 2 ", du kan skicka nya datum till skriptet varje gång du kör det . Återigen , i de två första raderna , använder du back- fästingen ` , inte ett enda citat .
Spara skriptet med namnet " timediff.sh " och kör kommandot " chmod + x timediff.sh . " in ditt skal för att låta Unix veta att den har behörighet att köra detta som ett skript
när du gör detta , kan du se skillnaden mellan två datum och tider genom att skriva:
. /timediff.sh 2010/09/13 1981/01/14 Addera