Corso C avanzato su Raspberry PI: Gestire la data e l’ora

Non si vedeva "l'ora" di presentare questo terzo articolo del corso avanzato sul linguaggio C per Raspberry Pi. Esso, difatti, tratta di un importante argomento: come gestire la data e l'ora con i propri programmi. L'argomento è collocato esattamente a questo punto del percorso poiché esso è basato sull'utilizzo delle strutture, argomento studiato nella precedente puntata. Grazie all'accesso e alla gestione della data e dell'orario, si possono effettuare tutte quelle operazioni legate a questa tipologia di dati, come i calcoli temporali, le operazioni sulle date e sull'ora, le pause d'attesa, l'acquisizione del giorno, del mese e dell'anno e molte altre.

Interrogare e gestire la data e l'ora di sistema è un'operazione molto importante. La data e l'ora rappresentano, infatti, una tipologia di informazioni, automaticamente aggiornate dal sistema, utili in molti contesti. Il linguaggio C possiede alcune librerie e funzioni per gestirle al meglio ma nulla toglie, al programmatore, di realizzarne da sé, secondo le proprie esigenze.

Come il C tratta la data e l'ora

Il metodo utilizzato dal linguaggio C per trattare e gestire queste due importanti informazione è geniale e molto funzionale. Esso utilizza una variabile di tipo long (cioè a 4 bytes, 32 bits) che tiene conto del numero dei secondi trascorsi dal 1 gennaio 1970. In questa semplice maniera è facile calcolare qualsiasi altra data successiva (e precedente). Questo super numero è chiamato timestamp. Pertanto, se tale variabile, al momento teorica, avesse il valore 86400 vorrà dire che l'orologio del sistema segna le ore 00:00 del 2 gennaio 1970, dal momento che in un giorno sono contenuti proprio 86400 secondi. Così, allo stesso modo, se il timestamp contenesse il valore 864000, l'ora e la data del giorno sarebbero le 00:00 del 11 gennaio 1970. Ultimo esempio: un timestamp di 1234567890 corrisponderebbe alle 23:31:30 del 13 febbraio 2009.

A tale scopo basta cercare su Google la stringa "timestamp calculator" per ottenere centinaia di siti in grado di effettuare i calcoli da un particolare timestamp alla data e ora corrispondenti, e viceversa. Allo stato attuale, alcuni di questi servizi sono elencati di seguito:

 

Si padroneggi con questa metodologia per comprendere come il sistema memorizzi qualsiasi ora e data grazie a questo numero speciale.

Il bug dell'anno 2038

Come abbiamo visto, il timestamp, ossia il numero di secondi trascorsi dal 1970, incrementa inesorabilmente ed arriverà il giorno in cui la variabile non riuscirà a contenere tale valore, perché esso diventerà troppo grande. Questa evenienza è detta overflow e si verifica quando un certo valore, per il suo elevato ammontare, non riesce ad essere rappresentato tramite i bytes per esso previsti dalla variabile. Come detto prima, il timestamp occupa 4 bytes, ossia 32 bits (signed) e con tali elementi si può rappresentare un valore massimo di (2^32)/2 = 2.147.483.648. Con tale grandezza il timestamp "traboccherà" esattamente (vedi figura 1) il 19 gennaio 2038 alle ore 3:14. Cosa succederà? Sicuramente non esploderà nulla ma i contatori dei computer considereranno negativo il conteggio segnando, come data di sistema, il 13 dicembre 1901. Un ritorno... al passato? Sicuramente no, a quell'epoca, i programmatori di sistemi operativi e di hardware riusciranno a risolvere brillantemente il problema. Basterebbe predisporre un timestamp a 64 bits (pari 8 bytes) per poter gestire un intervallo di quasi 600 miliardi di anni!

 

Figura 1: Il Bug del 2038.

Figura 1: Il Bug del 2038.

Visualizzare il timestamp: la funzione time()

Bene, vediamo di conoscere più da vicino il timestamp, realizzando un visualizzatore continuo. Con poche righe di codice si può realizzare il tutto. Ecco il programma, con il commento a seguire:

[...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 3186 parole ed è riservato agli abbonati MAKER. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici MAKER e potrai fare il download (PDF) dell'EOS-Book del mese. ABBONATI ORA, è semplice e sicuro.

Abbonati alle riviste di elettronica

3 Commenti

  1. Massimiliano.Elico 4 settembre 2018
  2. Mariangela.Mone Mariangela.Mone 9 ottobre 2018
    • Giovanni Di Maria Giovanni Di Maria 9 ottobre 2018

Scrivi un commento

EOS-Academy

Ricevi GRATIS le pillole di Elettronica

Ricevi via EMAIL 10 articoli tecnici di approfondimento sulle ultime tecnologie