2013-02-11 4 views

risposta

41

Per convertire una data di secondi dall'epoca:

date --date="19-FEB-12" +%s 

epoca attuale:

date +%s 

Quindi, dal momento che sono le date in passato:

NOW=`date +%s` 
THEN=`date --date="19-FEB-12" +%s` 

let DIFF=$NOW-$THEN 
echo "The difference is: $DIFF" 

Utilizzo del comando BSD date, si wo ULD bisogno

$ date -j -f "%d-%B-%y" 19-FEB-12 +%s 

Differenze da GNU date:

  1. -j impedisce date dal tentativo di impostare l'orologio
  2. Il formato di ingresso deve essere impostato in modo esplicito con -f
  3. La data di ingresso è un regolare argomento, non un'opzione (vale a dire -d)
  4. Quando non viene specificata un'ora con la data, utilizzare l'ora corrente invece di mezzanotte.
+0

fredda grazie! – hellish

+1

Vorrei +1 @chepner per i dettagli BSD se potessi :) – Anew

1

Ecco un modo utilizzando GNU awk. Per eseguire:

awk -f script.awk file 

Contenuto del script.awk:

BEGIN { 

    n = systime() 

    FS="-" 
} 

{ 
    t = mktime(sprintf("%d %d %d %d %d %d", "20" $3, convert($2), $1, 0, 0, 0))  

    printf "%.1f days ago\n", (n - t)/60/60/24 
} 

function convert(m) { 

    return(((index("JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC", m) - 1)/3) + 1) 
} 

Risultati:

358.6 days ago 
361.6 days ago 
1286.6 days ago