L'Epoca
In Unix e Linux, le date sono sempre rappresentate internamente come il numero di secondi a partire dal 1° gennaio 1970 alle 00:00 del Tempo Medio di Greenwich (GMT, oggi UTC, o Tempo Universale Coordinato). Questa data originale viene talvolta chiamata "l'Epoca". In alcune situazioni negli script di shell è necessario convertire l'ora Unix in una data normale e viceversa.
Conversione di date
Una conversione può avvenire in entrambe le direzioni con il comando date
. Con l'opzione -d
si specifica la data da visualizzare (altrimenti date visualizzerà l'ora corrente). L'ora epocale è scritta semplicemente come un numero decimale preceduto da una @. Ad esempio, il 1234567890
esimo secondo dall'epoca del febbraio 2009:
user@linux> date -d @1234567890
Sa 14. Feb 00:31:30 CET 2009
Al contrario, è possibile convertire una data in un timestamp Unix utilizzando un +%s come specifica di formato per date
. In questo modo si otterrà l'ora corrente, ad esempio:
user@linux> date +%s
Per convertire un'ora particolare, è necessario specificarla nuovamente con -d
. Sono ammesse diverse rappresentazioni. Per la conversione del 18.12.2008 alle 12:34 si specifica:
user@linux> date -d '2008-12-18 12:34:00' +%s
1229600040
Non dimenticare che l'indicazione dell'ora è sempre calcolata in UTC, a differenza della data scritta, che deve essere intesa in relazione al vostro fuso orario. Ecco perché si ottiene -3600
secondi in Germania quando si converte l'1.1.1970 in secondi:
user@linux> date -d '1970-01-01 00:00:00' +%s
-3600
Perché? Quando l'1.1.1970 erano le 00:00 in Germania, nel Regno Unito erano le 23:00 del giorno precedente (a Greenwich, a Londra).