Newsgroup: it.comp.os.linux.development
Titolo: timestamp

Quale e' l'equazione che a partire da un linux timestamp mi fa risalire 
alla data in formato 'umano'?
Grazie
lorenzo

 alla data in formato 'umano'?
Uno "unix timestamp" è il numero di secondi passati dalle 00:00:00[1]
del primo gennaio 1970.
Per convertire in un formato human readable vi sono varie funzioni:
dipende dal linguaggio che usi.
+++
[1] Non ricordo la timezone. *Forse* è UT, ma qui lo dico e qui lo nego.
Ciao,
 Emmanuele.
-- 
Emmanuele Bassi (Zefram)                 [ 
http://www.emmanuelebassi.net
 ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

 dipende dal linguaggio che usi.
mi piacerebbe avere l'algoritmo di conversione piu' che la specifica 
funzione.
Grazie
lorenzo

 funzione.
Calcola il numero di secondi da un giorno.
Sai quanti secondi ci sono in un giorno, e puoi sapere quanti giorni
sono passati da un determinato anno (facendo attenzione agli anni
bisestili). È banale aritmetica.


lorenzo wrote:

beh.. questa funzione fa l'operazione contraria.. tenendo conto di bisestili
e di tutto
/* Convert the date in seconds since 1-Jan-1970 00:00:00 */
time_t mktime(tm_t *tp)
{
        uint32 mon = tp->tm_mon;
        uint32 year = tp->tm_year;
        if (0 >= (int) (mon -= 2)) { /* 1..12 => 11,12,1..10 */
                mon += 12;
                year -= 1;
        }
        return 
        (
            (
                (
                (uint32)
                ( year/4 - year/100 + year/400 + 367*mon/12 + tp->tm_mday) +
                        year*365 - 719499
                ) * 24 + tp->tm_hour /* hours */
            ) * 60 + tp->tm_min /* minutes */
        ) * 60 + tp->tm_sec; /* seconds */
}
ciao
-- 
matteo merli
http://merlimat.altervista.org


ftp://alpha.gnu.org/gnu/coreutils/
cerca i sorgenti di date, tra le coreutils
Ciao
Marco
-- 
       marco.atzeri at 
fastwebnet.it
La prima delle Frequently Asked Questions: 
dove sono le FAQ ?      it.faq

 bisestili). È banale aritmetica.
]zac[
Non è un mettere in dubbio è solo una domanda: sicuro?
Mi è capitato di fare una cosa simile usando java e scoprire che usa un
tempo UTC (le durate degli anni possono variare periodicamente (al di la
del bisestile) per resincronizzazioni con il tempo solare (o simili)).
E su notevoli periodi la differenza tra la data calcolata da java e quella
puramente matematica (con gestione del bisestile) non è trascurabile.

 writes:
[...]
  GDB> E su notevoli periodi la differenza tra la data calcolata da
  GDB> java e quella puramente matematica (con gestione del bisestile)
  GDB> non è trascurabile.
Credo dipenda da come individui gli anni bisestili; se supponi che sia
bisestile un anno ogni quattro, probabilmente ti troverai in
difficoltà.
Ciao,
nico

 puramente matematica (con gestione del bisestile) non è trascurabile.
Quanto notevoli sono questi periodi?
+++
Ad ogni modo, la discussione andrebbe su it.comp.lang. Qui al massimo
posso dare le coordinate per le funzioni POSIX che fanno le conversioni.


 difficoltà.
]zac[
Ehm ..... non gestire correttamente gli anni bisestili sarabbe un errore ...
grossolano.
Normalmente individuo gli anni bisestili passando a qualche funzione di
conversione da stringa a data il 29 febbraio di un certo anno, se
restituisce un errore l'anno non è bisestile.
Comunque ribadisco che il problema del tempo UTC che ho riscontrato in java
ha a che fare con risincronizzazioni (se ricordo bene a mezzanotte
dell'ultimo giorno dell'anno), e diventa evidente solo per periodi di
numerosi anni.

 
Beh, ci sono metodi meno...ehm... grossolani per sapere se un anno e' 
bisestile. Senza dover fare conversioni stringa->data.
Ovviamente stiamo parlando di una data non precedente al 1 gennaio 1970, 
vero? (l'OP si riferiva al timestamp)
Perche' se andiamo molto indietro nel tempo le cose cambiano (c'e' 
sempre quella decina di giorni di "balzo temporale" di qualche secolo 
fa... ;-)
-- 
Roal Zanazzi

 bisestile. Senza dover fare conversioni stringa->data.
]zac[
eheh ... ok.
Diciamo che quando c'è un problema che potrebbe dare problemi 'rognosi e/o
poco palesi', preferisco utilizzare funzioni di sistema che di solito non
danno problemi e risolvono il problema con un semplice 'if'

 Quanto notevoli sono questi periodi?
]zac[
Dipende dalla precisione richiesta, quindi diciamo da qualche anno a qualche
decina di anni.
Se si intende misurare il minuto o i secondi può bastare molto meno.

 (almeno nel tempo UTC).
Per risoluzioni grandi (o piccole) a piacere (e.g.: ore), si: basta
quello.
In generale, vi sono dei contributi (i leap second) che vanno aggiunti
se si vuole una precisione, ma solo al secondo o al minuto.
