Hvis du trenger å finne forskjellen mellom to klokkeslett , enten de variere fra bare noen få sekunder eller år , kan du gjøre dette i GNU versjon av Unix med "date "-kommandoen . Imidlertid er prosedyren ikke er intuitivt , som datoen kommandoen ikke gir direkte et flagg eller argument for denne prosedyren . I tillegg flere versjoner av date-kommandoen eksisterer i Unix . Merk at det som fungerer i GNU versjonen av date-kommandoen vil ikke fungere med BSD -versjonen . Unix Epoch
Nøkkelen til å løse dette problemet er å forstå hvordan datamaskinen faktisk holder styr på tiden. En Unix datamaskin lagrer alle ganger som antall sekunder som har gått siden den Unix Epoch . Unix Epoch er midnatt 1. januar 1970.
Å få sekunder Siden Unix Epoch
Du kan få antall sekunder siden Unix Epoch til en gitt dato hjelp av en kombinasjon av " + % s" flagg og " - dato "-kommandoen . Skriv inn følgende i et skall for å få antall sekunder fra Unix Epoch til 11 mars 2011 : en
dato - dato 2011-03-11 + % s
Resultatet vil bli : 1299823200 . Du kan bruke hvilken som helst dato -time format som du kan analysere ved "date "-kommandoen i dette skriptet . Du kan skrive "man date" inn i skallet for å lese om alle de gyldige datoformatene .
Løsningen
p Som du kan ta en gitt dato eller tid i en Unix kompatibelt format og konvertere den til sekunder før eller siden Unix Epoch , kan du finne forskjellen mellom to ganger ved å trekke resultatene av to av disse kommandoene.
Skriv inn følgende kommandoer i din shell:
d1 = ` date - dato 2011-03-11 + % s `
d2 = ` date - dato 2010-05-12 + % s `
< p> echo " $ ( ( ( d1 - d2 ) ) ) sekunder forskjell"
i de to første linjene , er ` tegnet ikke et sitat mark . Det er en back -tick . Du kan finne dette tegnet til venstre for " 1 "-tasten på et standard norsk tastatur .
Utgangen skal være forskjellen mellom de to ganger i løpet av sekunder . Hvis du trenger, kan du konvertere dette til minutter, timer , dager og så videre ved å dividere med antall sekunder i et minutt , minutter i en time eller timer på en dag .
Et skript
Som det ville være tungvint å skrive ut disse tre lange kommandoer hver gang , bør du kapsle det inn i et skript. ! Åpne din favoritt teksteditor og lim inn følgende : en
# /usr /bin /env bash
d1 = ` date - date $ 1 + % s `
d2 = ` date - date $ 2 + % s `
echo " $ ( ( ( d1 - d2 ) ) ) sekunder forskjell"
Dette endrer noen ting . Den øverste linjen lar den nåværende skall vet at du skriver dette skriptet til å bruke språket i " bash " shell . Som du erstatte datoer i de to datokommandoene med " $ 1 " og " $ 2 ", kan du passere nye datoer til skriptet hver gang du kjører den . Igjen , i de to første linjene , bruker du tilbake -tick ` , ikke et eneste sitat.
Lagre skriptet med navnet" timediff.sh "og kjøre kommandoen" chmod + x timediff.sh . "i skallet for å la Unix vet at det har tillatelse til å kjøre dette som et skript
Når du gjør dette , kan du finne forskjellen mellom to datoer og klokkeslett ved å skrive : en
. /timediff.sh 2010-9-13 1981-1-14