Come trovare il tempo Differenza di script UNIX

June 20

Se hai bisogno di trovare la differenza tra due volte, se differiscono per pochi secondi o per anni, si può fare questo nella versione GNU di Unix con il comando "date". Tuttavia, la procedura non è intuitivo, come il comando date non fornisce direttamente una bandiera o un argomento per questa procedura. Inoltre, esistono più versioni del comando date in Unix. Si noti che ciò che funziona nella versione GNU del comando date non funzionerà con la versione BSD.

Unix Epoch

La chiave per risolvere questo problema è capire come il computer in realtà tiene traccia del tempo. A Unix negozi di computer tutte le volte come il numero di secondi trascorsi dalla Unix Epoch. Il tempo di UNIX mezzanotte del 1 gennaio 1970.

Ottenere i secondi dall'epoca Unix

È possibile ottenere il numero di secondi dalla Unix Epoch di una data determinata utilizzando una combinazione del "+% s" bandiera e il comando "--date". Digitare quanto segue in una shell per ottenere il numero di secondi dalla Unix Epoch al 11 marzo 2011:

Data --date 2011-03-11 +% s

Il risultato sarà: 1299823200. È possibile utilizzare qualsiasi formato di data e ora che è possibile analizzare con il comando "date" in questo script. È possibile digitare "Data l'uomo" nella vostra shell per leggere su tutti i formati di data.

La soluzione

Come si può prendere qualsiasi data e ora in un formato compatibile con Unix e convertirlo ai secondi prima o dopo la Unix Epoch, è possibile trovare la differenza tra due volte sottraendo i risultati di due di questi comandi.

Digitare i seguenti comandi nel tuo guscio:

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

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

echo "$ (((D1-D2))) differenza secondi"

Nelle prime due righe, il `personaggio non è un marchio preventivo. Si tratta di un back-tick. È possibile individuare questo carattere a sinistra del tasto "1" su una tastiera standard degli Stati Uniti.

L'uscita dovrebbe essere la differenza tra i due tempi in secondi. Se avete bisogno, è possibile convertire questo in minuti, ore, giorni, e così via dividendo per il numero di secondi in un minuto, a pochi minuti in un'ora o ore in un giorno.

Un copione

Come sarebbe un fastidio di digitare questi tre lunghi comandi ogni volta, si dovrebbe incapsulare in uno script. Aprite il vostro editor di testo preferito e incollare il seguente:

! / Usr / bin / bash ENV

d1 = date --date $1 +%s

d2 = date --date $2 +%s

echo "$ (((D1-D2))) differenza secondi"

Questo cambia un paio di cose. La linea superiore permette shell corrente sapere che si scrive questo script per usare il linguaggio della shell "bash". Come si sostituiscono le date dei due comandi data con "$ 1" e "$ 2", è possibile passare nuove date per lo script ogni volta che lo si esegue. Ancora una volta, nelle prime due righe, si utilizza il back-tick `, non un solo preventivo.

Salvare lo script con il nome "timediff.sh" ed eseguire il comando "chmod + x timediff.sh" nella shell Unix per far sapere che ha permesso di eseguire questo come uno script.

Dopo aver fatto questo, si può calcolare la differenza tra due date e gli orari digitando:

./timediff.sh 2010/09/13 1981/01/14