Pagine

venerdì 4 settembre 2009

Unixstamp: Ora e minuti in Unix e Linux

Unixstamp: Ora e minuti in Unix e Linux

Premessa

Lavorando con il CMS Tikiwiki, ho notato che le date e ora sul server MySQL sono memorizzate in formato timestamp. Non sapendo cosa fosse mi sono informato e in questo articolo vado a spiegarlo.

Cosa è il timestamp Unix

Il timestamp è un numero intero che descrive una data comprensiva di ore, minuti, secondi in secondi a partire dallo Unix Time Epoque che corrisponde alla mezzanotte del primo gennario del 1970 (00:00:00 UTC 1 gennaio 1970).

Ogni giorno consta di 86400 secondi...
Per questo motivo, l'algoritmo di calcolo è il seguente:
5 giorni 20 ore 8 minuti e 5 secondi corrisponde a
((5*86400)+(20*3600)+(8*60)+5) = 504485

Il motivo per il quale si utulizza il TimeStamp è che un numero intero è molto più semplice da gestire.
Un errore che facevo in precenza, era convertire le date/ore da numero intero a formato leggibile e poi fare i calcoli.
Al contrario consiglio di effettuare i calcoli con il numero intero e poi fare la conversione a valle.

L'algoritmo finale da usare è il seguente:
  • Supponiamo di essere alle 16.42.28 del 4/9/2009
  • La differenza in giorni tra 4/9/2009 e 1/1/1970 = 14491
  • Il risultato finale sarà: 14491*86400+16*3600+42*60+28 = 1252082548

Viceversa l'algoritmo inverso sarà:
  • Supponiamo che l'ora e data corrente sia 1252082548
  • 1252082548/86400 = 14491.6961574074 ==> La parte intera è il numero di giorni
    • Giorni: 14491
  • (14491.6961574074 - 14491)*86400/3600 = 16.7077777777760 ==> La parte intera sono le ore
    • Ore: 16
  • (16.7077777777760 - 16)*3600/60 = 42.46666667 ==> La parte intera sono i minuti
    • Minuti: 42
  • (42.46666667-42)*60 = 28 ==> Ovvero i secondi
    • Secondi: 28

Anche se tutto questo può sembrare complicato, al contrario è un metodo che spesso velocizza di molto i calcoli in fase di programmazione. Ogni calcolo si fa con il TimeStamp e si converte solo alla fine quando si vuole rendere disponibile il risultato all'utente finale.

Nessun commento:

Posta un commento