Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TDateTime vergleichen?? (https://www.delphipraxis.net/28526-tdatetime-vergleichen.html)

Rakshasa 25. Aug 2004 21:58


TDateTime vergleichen??
 
Hi!!

Schon wieder ein komischer Fehler bei meinem Delphi (oder mir?!?)

Ich habe zwei TDateTime-Variablen: DateNow und DateOld. Ziel ist es, beide TDateTimes zu vergleichen, eigentlich ganz einfach.


Wollte dazu folgenden Code benutzen:

Code:
If DateNow <> DateOld then begin
 ...
end;
Sollte ja eigentlich kein Problem sein! Funktioniert aber nicht! Das verrückte ist, wenn ich mir mit

Code:
If DateNow <> DateOld then begin
 Showmessage(DateTimeToStr(datenow) + ' <> ' +  DateTimeToStr(dateold));
end;
die beiden Daten anzeigen lasse, sind diese definitiv gleich! Wenn ich dann mit diesem Code

Code:
if not Sametext(DateTimeToStr(DateNow), DateTimeToStr(DateOld)) then begin
 ...
end;
vergleiche, werden die Unterschiede zwischen den beiden Daten gefunden! Was mache ich falsch?? Oder programmiere ich schon zu lange heute????

Fossibaer58809 25. Aug 2004 22:03

Re: TDateTime vergleichen??
 
Da gibts in Delphi (zumindest in Version 7) die Funktion

function CompareDateTime(const A, B: TDateTime): TValueRelationship;

Gruß

Michael

Jelly 25. Aug 2004 22:04

Re: TDateTime vergleichen??
 
Zitat:

Zitat von Rakshasa
Oder programmiere ich schon zu lange heute????

Das kann ich nicht beurteilen, aber dir vielleicht bei deinem Problem helfen :mrgreen:

Wie sind denn DateOld und DateNow deklariert? Als TDateTime? Dann beinhaltet die Variable nicht nur das Datum, sondern auch die Zeit, bis auf die 1/1000 Sekunde genau. Wenn du also nur das Datum vergleichen willst, dann entweder mit
Delphi-Quellcode:
if Trunc(DateOld) <> Trunc(DateNow) then ...
, oder du nimmst als Datentyp einfach TDate.

Gruß,

Union 25. Aug 2004 22:05

Re: TDateTime vergleichen??
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Rakshasa
Hi!!
... vergleiche, werden die Unterschiede zwischen den beiden Daten gefunden! Was mache ich falsch?? Oder programmiere ich schon zu lange heute????

Ich denke Du hast recht... Wahrscheinlich hast Du einen Fehler beim Initialisieren der Werte gemacht

Rakshasa 25. Aug 2004 22:42

Re: TDateTime vergleichen??
 
Hi!!

Danke für eure Antworten!

Also: Die beiden TDateTimes sollen auch die Zeitangabe enthalten, und richtig initiliasisiert werden sie auch.

Dass es auf die MS genau ist, wusste ich nicht, daran wird's liegen. Denn auch die Funktion "CompareDateTime" liefert ungleich zurück, während DateTimeToStr() offensichtlich aufrundet.

Mal sehen, ob ich mit Trunc() erfolg habe ...

(tiptiptiptip)

Jup, hat geklappt. Kann mir jemand sagen, wie sehr Trunc() aufrundet? Ich muß die beiden Werte auf die Sekunde (nicht MS!) genau vergleichen können, also z.B. 14:03:30.

Jelly 25. Aug 2004 22:48

Re: TDateTime vergleichen??
 
Probiers mal so:

Delphi-Quellcode:
if abs (DateNow-DateOld) <= EncodeTime (0,0,1,0) then begin
   ...
end ;
Gruß,

xineohp 25. Aug 2004 23:18

Re: TDateTime vergleichen??
 
moin,

Trunc() schneidet lediglich die Nachkommastellen einer Gleitkommazahl ab. Da TDatetime intern eine solche ist und der Vorkommateil die Tage seit ~1800 (siehe OH) angibt, ist das Ergebnis also auf ganze Tage abgerundet.
Willst du es genauer haben, muss du vorher multiplizieren. Für eine Vergleich mit Sekunden ganuigkeit also:
Trunc(OldTime*24*60*60)<>Trunc(NewTime*24*60*60)

nailor 25. Aug 2004 23:21

Re: TDateTime vergleichen??
 
Delphi-Quellcode:
implementation

uses math;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var dateold, datenew: tdatetime;
begin
iszero(dateold - datenew, 0.5);
end;

end.
tut auch


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz