Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: bonmario - Gennaio 22, 2020, 10:26:03 am

Titolo: [RISOLTO]Confronto tra 2 variabili di tipo TDateTime
Inserito da: bonmario - Gennaio 22, 2020, 10:26:03 am
Ciao,
devo confrontare 2 variabili di tipo TDateTime, che "dovrebbero" contenere solo data, ora, minuti e secondi.
Dopo vari debug, mi sono reso conto che ho dei malfunzionamenti dovuti al fatto che, anche se non visibili, nelle 2 variabili ci sono anche i millisecondi.

Sapete se c'è già una funzione come la "CompareDateTime", a cui però posso dire di fermarsi ai secondi per fare il confronto?

Grazie in anticipo, Mario
Titolo: Re:Confronto tra 2 variabili di tipo TDateTime
Inserito da: xinyiman - Gennaio 22, 2020, 01:41:41 pm
Io userei la procedura

https://www.freepascal.org/docs-html/current/rtl/dateutils/decodedatetime.html

e poi confronterei i valori che ti interessano :)
Titolo: Re:Confronto tra 2 variabili di tipo TDateTime
Inserito da: Mimmo - Gennaio 22, 2020, 02:56:26 pm
Ciao,
altro sistema: essendo che il TDateTime è in realtà un double e che 1 corrisponde ad un giorno, potresti confrontare il valore assoluto della differenza tra le 2 date con 1/86400. Se il valore assoluto della differenza è minore di quel valore, allora la distanza tra le 2 date è meno di un secondo.
Titolo: Re:Confronto tra 2 variabili di tipo TDateTime
Inserito da: bonmario - Gennaio 22, 2020, 02:56:47 pm
Alla fine ho fatto così:
Codice: [Seleziona]
function TForm1.ConvertiDataOraPerCfr(DataOraInp: TDateTime): String;
begin
  Result:=FormatDateTime('yyyy-mm-dd-hh-nn-ss', DataOraInp);
end;

Poi confronto le 2 stringhe !!

Ciao, Mario
Titolo: Re:[RISOLTO]Confronto tra 2 variabili di tipo TDateTime
Inserito da: nomorelogic - Gennaio 22, 2020, 05:55:41 pm
segnalo questa documentazione

https://www.freepascal.org/docs-html/rtl/dateutils/comparedatetime.html (https://www.freepascal.org/docs-html/rtl/dateutils/comparedatetime.html)
Titolo: Re:[RISOLTO]Confronto tra 2 variabili di tipo TDateTime
Inserito da: bonmario - Gennaio 22, 2020, 06:38:45 pm
E' quella che avevo scritto io nel primo post.
Guardando i sorgenti, le segnala come differenti in base ai millesimi di secondo, a me serviva che non andasse oltre ai secondi per il confronto.

Ciao, Mario
Titolo: Re:[RISOLTO]Confronto tra 2 variabili di tipo TDateTime
Inserito da: Stilgar - Gennaio 22, 2020, 07:54:10 pm
Ciao.Tanto hai risolto quindi è per antologia che ti faccio una proposta di soluzione.
Se hai bisogno di confrontare le date, estrai anno mese giorno e il resto delle informazioni che ti servono dalla data.Le converti in un UInt64. Questo per ogni data. Poi confronti i due "numeroni" che  hai ottenuto.
ALternativa 2.fai i confronti in cascata.Prima l'anno, poi il mese e via discorrendo:)
Terza soluzioneSecondo me con una * e un truncate messe al posto giusto potresti ottenere delle conversioni veloci da double a UInt64, così da fare il confronto matematico :)

Stilgar
PS:
Appena ho un attimo provo a fare qualche mageggio coi bit :)