Italian community of Lazarus and Free Pascal
Programmazione => Generale => Topic aperto da: corradoventu - Gennaio 15, 2017, 09:17:08 am
-
Sto cercando di capire come trattare TDateTime (now) e in:
https://www.daniweb.com/programming/software-development/threads/103675/tutorial-handling-dates-and-time-in-delphi trovo:
Delphi 2.0 and later supply the TDateTime format, which is actually a floating point number (stored as a IEEE double) containing the number of days that have passed since 12 December 1899.
Perchè questa data?
La ricerca è nata perchè sto cercando di trovare la differenza di tempo tra due eventi; MilliSecondsBetween(tnew,told) mi da solo i millisecondi, io vorrei maggior precisione e vedo che in nel formato TDateTime c'è di più ...
-
Ciao,
sul motivo, credo che la logica sia la stessa che ha portato ad esempio i sistemi Linux ad avere come "data iniziale" il 01/01/1970: serviva un punto di riferimento per il calcolo della data ed ora attuale.
Per quanto riguarda la tua "maggior precisione", cosa intendi?
Ti servono i secondi?
Il n° di millesimi di secondo restituiti dalla funzione non è esatto?
In quest'ultimo caso, ci sarebbe la funzione GetTickCount64, che in passato avevo letto essere più precisa, ma non ne ho mai approfondito i motivi. In ogni caso, ne parlano ad esempio qui:
http://forum.lazarus.freepascal.org/index.php?topic=6099.0
Ciao, Mario
-
Mi servono i centesimi, o almeno i decimi di milisecondo. Nel frattempo credo di aver capito, il formato TdateTime è in giorni, quindi i numeri dopo la virgola sono frazioni di giorno, non secondi o millisecondi. Quanto a MilliSecondsBetween(tnew,told) funziona perfettamente.
La scelta della data 12 dicembre 1899 deve avere una ragione recondita, ma non ho trovato un evento importante a quella data.
Così però cercando ho trovato un sito fantastico: A Freely Accessible Repository of Digitized California Newspapers from 1846 to the Present
https://cdnc.ucr.edu/cgi-bin/cdnc?a=cl&cl=CL2&e=-------en--20--1--txt-txIN--------1
quando si dice serendipity ...
Quanto alla differenza di tempi (TimeNew-Timeold)*24*3600 si ottiene il tempo in secondi con ben 13 decimali.
ove TimeNew e Timeold sono ottenuti = now in diversi momenti.
-
Trovata la regione del 12 dicembre 1899, c'è un errore nell'articolo che ho citato,
http://forum.lazarus.freepascal.org/index.php/topic,35436.0.html
http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/System__TDateTime.html
l'ora zero è 0 12/30/1899 12:00 am