![]() |
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:
Sollte ja eigentlich kein Problem sein! Funktioniert aber nicht! Das verrückte ist, wenn ich mir mit
If DateNow <> DateOld then begin
... end;
Code:
die beiden Daten anzeigen lasse, sind diese definitiv gleich! Wenn ich dann mit diesem Code
If DateNow <> DateOld then begin
Showmessage(DateTimeToStr(datenow) + ' <> ' + DateTimeToStr(dateold)); end;
Code:
vergleiche, werden die Unterschiede zwischen den beiden Daten gefunden! Was mache ich falsch?? Oder programmiere ich schon zu lange heute????
if not Sametext(DateTimeToStr(DateNow), DateTimeToStr(DateOld)) then begin
... end; |
Re: TDateTime vergleichen??
Da gibts in Delphi (zumindest in Version 7) die Funktion
function CompareDateTime(const A, B: TDateTime): TValueRelationship; Gruß Michael |
Re: TDateTime vergleichen??
Zitat:
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:
, oder du nimmst als Datentyp einfach TDate.
if Trunc(DateOld) <> Trunc(DateNow) then ...
Gruß, |
Re: TDateTime vergleichen??
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
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. |
Re: TDateTime vergleichen??
Probiers mal so:
Delphi-Quellcode:
Gruß,
if abs (DateNow-DateOld) <= EncodeTime (0,0,1,0) then begin
... end ; |
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) |
Re: TDateTime vergleichen??
Delphi-Quellcode:
tut auch
implementation
uses math; {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var dateold, datenew: tdatetime; begin iszero(dateold - datenew, 0.5); end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz