![]() |
Vergleich von 2 TDateTime's
Nabend.
Ich habe hier ein Datum, welches größergleich einem StartDatum und kleinergleich einem Enddatum sein muss. Dazu benutze ich eine Funktion IsValidDate.
Delphi-Quellcode:
function TSemesters.IsValidDateToSemester(SemesterId: TSemesterID;
Date: TDateTime): Boolean; var SemesterInfo : TSemesterValue; begin ... // SemesterInfo ist ein Record. SemesterBegin und SemesterEnd vom Typ TDate Result := (Date - SemesterInfo.SemesterBegin >= 0.0) and (SemesterInfo.SemesterEnd - Date >= 0.0) end; Nun weiß ich ja, dass ein direkter >=, <=, == Vergleich mit Gleitkommazahlen kritisch ist. Aber TDates belegen doch eh nur die Vorkommastelle und daher müsste ein Vergleich >= funktionieren - oder? Vllt denke ich auch falsch. Ich bräuchte nur ein kurzes Feedback. Thanks. |
Re: Vergleich von 2 TDateTime's
Schau dir doch mal CompareDateTime in der Unit DateUtils an.
|
Re: Vergleich von 2 TDateTime's
Du kannst einen beliebigen Datums/Zeit Wert in eine signifikante Zahl umwandeln. Somit ist ein Vergleich zweier Datumswerte unzweifelhat möglich
|
Re: Vergleich von 2 TDateTime's
Die Überlegung ist zwar grundlegend richtig, aber aus den von dir bereits genannten Gründen sollte der Vergleich auf Datumswerte kein Problem darstellen.
Erstmal handelt es sich beim TDATE Wert um den Vorkommaanteil; und der wird präzise genug abgebildet. Außerdem hast du ja keine Prüfung auf Gleichheit, sondern auf auf 'Größer Gleich'. Nichts anderes tut man ja auch beim Vergleich zweier Floats; schauen, ob die Differenz zweier Werte Größer/Kleiner als eine gewisse Toleranz ist. Spannender wäre es, wenn du versuchen würdest Daten unterhalb von Millisekunden zu vergleichen. Also meiner Meinung nach ist dies durchaus legitim und dürfte auch keine Probleme geben (mache es selbst so ;-) Jan |
Re: Vergleich von 2 TDateTime's
Hallo,
das Problem tritt dann auf, wenn du einen Tag z.B. über eine Addition von Stunden erzeugst. In Abhängigkeit der jeweiligen Stunden gibt es Rundungsprobleme. StrToTime('08:00')+StrToTime('08:00')+StrToTime('0 8:00') ergibt z.B. nicht genau 1.0 (24h = 1 Tag) Da hilft dann DateOf von Jedi. Heiko |
Re: Vergleich von 2 TDateTime's
Oder einfach Trunc( <DateTime>)
|
Re: Vergleich von 2 TDateTime's
Hallo BackOrifice,
TDate = TDateTime= Double TDate belegt nicht nur die Vorkommastellen, sondern ist ein Type der Double entspricht und nur der bessern Lesbarkeit des Quellcodes dient. Zitat:
Bis bald Chemiker |
Re: Vergleich von 2 TDateTime's
Zitat:
|
Re: Vergleich von 2 TDateTime's
Hallo hoika,
vielleicht habe ich das ja nicht richtig verstanden, aber bei mir kommt 1 raus.
Delphi-Quellcode:
Bis bald Chemiker
cStd:= StrToTime('08:00')+StrToTime('08:00')+StrToTime('08:00');
edDatumAus.Text:= FloatToStr(cStd); |
Re: Vergleich von 2 TDateTime's
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 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 by Thomas Breitkreuz