AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TDateTime vergleichen??

Ein Thema von Rakshasa · begonnen am 25. Aug 2004 · letzter Beitrag vom 25. Aug 2004
Antwort Antwort
Benutzerbild von Rakshasa
Rakshasa

Registriert seit: 1. Nov 2003
182 Beiträge
 
Delphi 2007 Professional
 
#1

TDateTime vergleichen??

  Alt 25. Aug 2004, 21:58
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????
  Mit Zitat antworten Zitat
Benutzerbild von Fossibaer58809
Fossibaer58809

Registriert seit: 20. Aug 2004
Ort: Lüdenscheid
50 Beiträge
 
Delphi 2007 Professional
 
#2

Re: TDateTime vergleichen??

  Alt 25. Aug 2004, 22:03
Da gibts in Delphi (zumindest in Version 7) die Funktion

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

Gruß

Michael
Michael Küper
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#3

Re: TDateTime vergleichen??

  Alt 25. Aug 2004, 22:04
Zitat von Rakshasa:
Oder programmiere ich schon zu lange heute????
Das kann ich nicht beurteilen, aber dir vielleicht bei deinem Problem helfen

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 if Trunc(DateOld) <> Trunc(DateNow) then ... , oder du nimmst als Datentyp einfach TDate.

Gruß,
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: TDateTime vergleichen??

  Alt 25. Aug 2004, 22:05
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
Miniaturansicht angehängter Grafiken
dpdatetime.jpg  
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von Rakshasa
Rakshasa

Registriert seit: 1. Nov 2003
182 Beiträge
 
Delphi 2007 Professional
 
#5

Re: TDateTime vergleichen??

  Alt 25. Aug 2004, 22:42
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.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#6

Re: TDateTime vergleichen??

  Alt 25. Aug 2004, 22:48
Probiers mal so:

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

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#7

Re: TDateTime vergleichen??

  Alt 25. Aug 2004, 23:18
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)
Peter Enenkel
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#8

Re: TDateTime vergleichen??

  Alt 25. Aug 2004, 23:21
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
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:52 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