Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   tDate-Vergleich Delphi 10.2.2 vs. 10.3.2 (https://www.delphipraxis.net/201904-tdate-vergleich-delphi-10-2-2-vs-10-3-2-a.html)

striderx 8. Sep 2019 23:08

tDate-Vergleich Delphi 10.2.2 vs. 10.3.2
 
Hallo,

der nachfolgende Vergleich ergibt unter 10.2.2 False, unter 10.3.2 True:

Delphi-Quellcode:
  if dtpStartDate.Date <> aExhibitions[CRE].StartDate then Modified := True;


Richtig ist False. dtpStartDate ist ein DateTimePicker, StartDate ist vom Type tDate.


Hat jemand eine Erklärung dazu?

timog 9. Sep 2019 05:44

AW: tDate-Vergleich Delphi 10.2.2 vs. 10.3.2
 
Ohne Deklaration schwer zu sagen, aber was gibt SameDate zurück?http://docwiki.embarcadero.com/Libra...Utils.SameDate

hoika 9. Sep 2019 06:23

AW: tDate-Vergleich Delphi 10.2.2 vs. 10.3.2
 
Hallo,
dtpStartDate.Date liefert meines Wissens Date+Time zurück.
Bei einem Datums-Vergleich sollte man also Trunc oder DateOf benutzen.

striderx 9. Sep 2019 06:27

AW: tDate-Vergleich Delphi 10.2.2 vs. 10.3.2
 
@timog

Mit SameDate kommt auch unter 10.3.2 das richtige Ergebnis.

In dem nachstehenden Beispiel wird nur die erste MessageBox aufgerufen:

Delphi-Quellcode:
procedure TdlgExhibitions.Button1Click(Sender: TObject);

var
  T: tDate;

begin
  T := aexhibitions[cre].StartDate;
  dtp1.Date := T;
  if T <> dtp1.Date then ShowMsg('1', '', mb_OK, mb_IconExclamation);
  if not SameDate(T, dtp1.Date) then ShowMsg('2', '', mb_OK, mb_IconExclamation);
end;

@hoika
Laut Dokumentation ist datetimepicker.date aber vom Type tDate. Und die Frage ist doch: Wieso kommt 10.3 ein anderes Ergebnis als unter 10.2.

freimatz 9. Sep 2019 07:19

AW: tDate-Vergleich Delphi 10.2.2 vs. 10.3.2
 
Die Antwort ist ganz einfach: weil die irgendwo im Sourcecode was geändert haben :-D
Welche Werte kommen denn? Was sagt der Debugger? Was bedeuten die Werte?
Es ist übrigens selten gut Fliesskommawerte zu vergleichen.

hoika 9. Sep 2019 07:22

AW: tDate-Vergleich Delphi 10.2.2 vs. 10.3.2
 
Hallo,
schau doch einfach nach, wenn du beide Versionen zur Verfügung hast.

Es kommt manchmal vor, das Bugs behoben werden.
Manchmal ist es aber eher auch ein "verschlimmbessern".

Und bitte teile und das Ergebnis hier mit.

PS:
Da bekommt man schon ein bisschen Angst vor einer neuen Version.

striderx 9. Sep 2019 07:53

AW: tDate-Vergleich Delphi 10.2.2 vs. 10.3.2
 
Zitat:

Es ist übrigens selten gut Fliesskommawerte zu vergleichen.
Das stimmt natürlich. Aus der Formulierung "TDate represents a special type of TDateTime value that has no decimal part" hatte ich geschlossen, dass tDate - im Gegensatz zu tDateTime - ein Integerwert ist. In der aktuellen Doku sehe ich jetzt aber, dass es ein Double ist. Das beantwortet zwar nicht die Frage nach dem Unterschied zwischen den Versionen, zeigt aber wo der Hase im Pfeffer liegen könnte.

Was seltsam ist: Wenn ich tDatePicker verwende, tritt das Problem nicht auf.


Zitat:

Da bekommt man schon ein bisschen Angst vor einer neuen Version.
Wie lautet der alte Spruch: Was ist neu an der neuen Version? Neue Fehler! :-D

Sinspin 9. Sep 2019 08:20

AW: tDate-Vergleich Delphi 10.2.2 vs. 10.3.2
 
Hallo,

ich halte das zum einen für Zufall, zum anderen zwei Double Werte auf gleich / ungleich zu vergleichen ist schon ein bisschen verrückt.
Beim vergleich von Tagen verwende auch ich Trunc um Ganzzahlen zu erhalten.
Beim arbeiten mit Werten aus einer Datenbank hatte ich es schon öfter dass scheinbar gleiche Datumswerte als unterschiedlich erkannt wurden.

hoika 9. Sep 2019 08:23

AW: tDate-Vergleich Delphi 10.2.2 vs. 10.3.2
 
Hallo,
man könnte auch Strings vergleichen
FormatDateTime('yyyymmdd'
Das ist aber nicht sonderlich performant.

Uwe Raabe 9. Sep 2019 08:52

AW: tDate-Vergleich Delphi 10.2.2 vs. 10.3.2
 
Ursache ist ein Fehler in 10.2, der in 10.3 behoben wurde. Beim Auslesen von Date bzw. Time wurde der jeweils irrelevante Teil nicht ausgefiltert. Das ist in der aktuellen Version behoben.

Version Tokyo:
Delphi-Quellcode:
function TCommonCalendar.GetDate: TDate;
begin
  Result := TDate(FDateTime);
end;
Version Rio:
Delphi-Quellcode:
function TCommonCalendar.GetDate: TDate;
begin
  Result := TDate(DateOf(FDateTime));
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:19 Uhr.
Seite 1 von 2  1 2      

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