Cos’è l’ora di Unix e quando è stata l’epoca di Unix?

Perché Unix ha il proprio concetto di tempo? Qual è l’epoca e qual è il problema Y2038?

L’ora Unix è un mezzo per rappresentare una data e un’ora specifiche, utilizzate da Linux, macOS e molti altri sistemi interoperabili. È così diffuso che probabilmente lo stai usando senza esserne consapevole. Una volta capito il tempo di Unix, però, lo individuerai in molti contesti. Diversi strumenti possono aiutarti a lavorare con il tempo Unix.

Qual è lo scopo di Unix Time?

Il tempo Unix è un conteggio dei secondi totali da un’ora e una data fisse. È un formato di data / ora (o timestamp) che ha un aspetto diverso dalle date e dagli orari leggibili dall’uomo a cui siamo abituati. Questo è puramente per motivi di efficienza. Ci vuole molto meno spazio per memorizzare un singolo numero che rappresenta i secondi rispetto a quello per memorizzare valori separati per anno, mese, ora, ecc.

Naturalmente, in termini moderni, la differenza di spazio non è poi così tanto. Ma si consideri che Unix è nato alla fine degli anni ’60, quando lo spazio di archiviazione disponibile era molto più piccolo. Anche i timestamp sono molto usati, quindi il loro spazio di archiviazione si somma. Ad esempio, a ogni file sono associati tre timestamp.

Il formato è praticamente impossibile da tradurre nella tua testa a meno che tu non sia un genio della matematica. Ma ha ancora alcuni vantaggi rispetto ad alternative più leggibili come Wed, 21 Oct 2015 07:28:00 GMT . Puoi ordinare due timestamp Unix molto facilmente, a colpo d’occhio. Di solito è anche più veloce calcolare la differenza tra due timestamp. Ciò è particolarmente vero per le date vicine, ad esempio nei giorni adiacenti.

A proposito dell’Epoch

Quindi, il tempo Unix è un conteggio totale dei secondi da un punto specifico nel tempo. Ma qual è quel momento nel tempo? Sono le 00:00:00 UTC del 1 gennaio 1970 . Questo è spesso indicato come Unix Epoch. I programmatori hanno scelto questa data per l’epoca per comodità poiché era la data rotonda più vicina quando hanno inventato l’ora Unix.

Potresti aver visto questa data quando qualcosa è andato storto. È chiaramente un bug, ma sembra molto strano quando si traduce in una data precedente alla nascita di molti di noi! È del tutto comprensibile, tuttavia, quando si conosce l’ora di Unix. Se un sistema sta cercando di visualizzare un timestamp che non ha alcun valore, spesso si tradurrà in 0 e risulterà nella data esatta dell’epoca.

Il formato dati ora Unix

A rigor di termini, non ce n’è uno. Il tipo di dati originale era un numero intero a 32 bit, e questo spesso rimane il caso, anche in sistemi molto più potenti.

Questo tipo di dati consente al valore di memorizzare un totale di 2 ^ 32 secondi, che è poco più di 136 anni. Questo valore è tipicamente firmato, il che significa che può essere negativo o positivo. Quindi, di solito rappresenta 68 anni su entrambi i lati dell’epoca, cioè 1902-2038.

Questo è ancora un periodo limitato, ovviamente. Ma l’uso principale del formato timestamp era per concetti come la modifica dei file. La necessità era molto quella di rappresentare il tempo vicino al presente, piuttosto che la storia antica o lontano nel futuro. Anche per applicazioni come i calendari, raramente è necessario rappresentare date a più di qualche decennio di distanza.

Ma ciò non significa che questo periodo di tempo limitato sia privo di problemi …

Il problema dell’anno 2038

Il bug Y2K ( uno dei peggiori errori di programmazione nella storia ) ha influenzato i sistemi informatici che memorizzavano gli anni come valori a due cifre. Quando arrivò l’anno 2000, tali sistemi lo trattavano come se fosse il 1900. In realtà, non fu così catastrofico come si temeva, principalmente perché molte persone spesero molto tempo e fatica in anticipo, preparandosi per questo.

Se stavi prestando attenzione nella sezione precedente, potresti aver individuato un problema simile che potrebbe influenzare il tempo di Unix. Ebbene, il tempo di Unix ha un suo problema di dati: il problema Y2k38. (Viene spesso definito un problema, non un bug; forse siamo diventati più ottimisti dall’anno 2000!) Quando il tempo di Unix si esaurisce letteralmente nel 2038, i sistemi considereranno le nuove date come 1902 o 1970. O forse loro ‘ fallirò del tutto.

Almeno questo problema non ci colpirà allo scoccare della mezzanotte di Capodanno. L’ultimo secondo del tempo Unix a 32 bit cadrà il 19 marzo. Nell’eventualità, probabilmente aggiorneremo la maggior parte dei sistemi entro il 2038 o saranno comunque obsoleti per allora.

Alcune utili risorse di timestamp

Il sito Epoch Converter è forse il convertitore di timestamp più completo disponibile. Inizia visualizzando l’ora corrente di Unix, in tempo reale, e aggiunge quasi tutte le funzionalità immaginabili oltre a quella. Il suo utilizzo principale è per la conversione tra timestamp e date leggibili dall’uomo, in entrambe le direzioni.

Dan’s Tools è una vasta raccolta di utili app web, una delle quali è un convertitore di timestamp . È più semplice, ma ha una presentazione molto pulita ed è facile da usare.

Time.is presenta un altro aspetto ancora più minimalista. Mostra l’ora in diversi formati, inclusa l’ora Unix. Include l’ora corrente nel titolo della pagina che è utile.

Utilizzo dell’ora Unix con gli strumenti della riga di comando

Su Linux e macOS, il programma data è l’utilità principale per gestire data / ora, inclusi i timestamp Unix. Chiamato senza argomenti, restituisce la data / ora corrente in un formato leggibile dall’uomo:

$ date
 Wed Feb 10 12:28:30 GMT 2021

Se hai bisogno della data / ora corrente nell’ora Unix, usa l’argomento +% s :

$ date +%s
 1612960114

Puoi convertire da una data leggibile dall’uomo in un timestamp utilizzando il flag -d se la tua versione di data lo supporta. La maggior parte delle versioni di Linux dovrebbe, per impostazione predefinita:

$ date -d "Jan 2 1970" +%s
 82800

Su macOS, la data è un programma diverso, che richiede un diverso insieme di flag:

$ date -j -f "%b %d %Y %T" "Jan 02 1970 00:00:00" "+%s"
 82800

Andando nella direzione opposta, puoi convertire da un timestamp Unix usando il flag -r :

$ date -r 1600000000
 Sun 13 Sep 2020 13:26:40 BST

Alcuni altri programmi usano il formato % s per gestire l’ora di Unix. Ad esempio, se vuoi mostrare la data di modifica di un file in tempo Unix, con la versione Linux di ls , puoi usare quanto segue:

$ ls -l --time-style=+%s index.tmp.html
 -rw-r--r-- 1 ubuntu ubuntu 17862 1521649818 index.tmp.html

Come utilizzare il tempo Unix nei linguaggi di programmazione

PHP ha la funzione time () che restituisce il timestamp Unix corrente. La sua funzione date () accetta un timestamp come secondo argomento:

$ php -r 'echo date("Ymd", time());'
 2021-02-11

JavaScript affronta le cose in un modo interessante. Ha un metodo Date.now () per ottenere il numero di millisecondi dall’epoca Unix. Ovviamente, puoi dividerlo per 1.000 e arrotondare il risultato per ottenere il tempo Unix equivalente in secondi:

> Math.floor(Date.now() / 1000)
 1613083012

Capire l’ora di Unix

Il tempo di Unix è un concetto semplice che emerge in molti posti. Una volta capito, potresti trovarlo molto utile, ad esempio, quando calcoli le differenze di orario. Puoi anche riconoscere quando potrebbe essere la causa di determinati bug.

Concetti come l’epoca e i timestamp sono una parte importante per iniziare con Linux. Per saperne di più sugli elementi essenziali come ls , consulta la nostra guida ai comandi di base di Linux.