AGB  ·  Datenschutz  ·  Impressum  







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

Vergleich von 2 TDateTime's

Ein Thema von BackOrifice · begonnen am 14. Feb 2009 · letzter Beitrag vom 16. Feb 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von BackOrifice
BackOrifice

Registriert seit: 6. Jun 2005
74 Beiträge
 
Delphi 2007 Architect
 
#1

Vergleich von 2 TDateTime's

  Alt 14. Feb 2009, 03:29
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.
Henning
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Vergleich von 2 TDateTime's

  Alt 14. Feb 2009, 03:45
Schau dir doch mal CompareDateTime in der Unit DateUtils an.
  Mit Zitat antworten Zitat
HaJo

Registriert seit: 28. Apr 2004
Ort: Würselen
140 Beiträge
 
Delphi 8 Enterprise
 
#3

Re: Vergleich von 2 TDateTime's

  Alt 14. Feb 2009, 04:08
Du kannst einen beliebigen Datums/Zeit Wert in eine signifikante Zahl umwandeln. Somit ist ein Vergleich zweier Datumswerte unzweifelhat möglich
Hans-Joachim Brosius
  Mit Zitat antworten Zitat
BoolString

Registriert seit: 2. Feb 2009
Ort: Varel
70 Beiträge
 
RAD-Studio 2009 Pro
 
#4

Re: Vergleich von 2 TDateTime's

  Alt 14. Feb 2009, 09:09
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Vergleich von 2 TDateTime's

  Alt 14. Feb 2009, 09:46
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
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Vergleich von 2 TDateTime's

  Alt 14. Feb 2009, 09:48
Oder einfach Trunc( <DateTime>)
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Vergleich von 2 TDateTime's

  Alt 14. Feb 2009, 09:51
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 von omata:
Schau dir doch mal CompareDateTime in der Unit DateUtils an.
omata hat die Lösung schon angegeben.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Vergleich von 2 TDateTime's

  Alt 14. Feb 2009, 09:52
Zitat von HaJo:
Du kannst einen beliebigen Datums/Zeit Wert in eine signifikante Zahl umwandeln. Somit ist ein Vergleich zweier Datumswerte unzweifelhat möglich
Ein TDateTime ist bereits eine Zahl, nämlich Double, also muss man nichts umwandeln. .
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Vergleich von 2 TDateTime's

  Alt 14. Feb 2009, 10:09
Hallo hoika,

vielleicht habe ich das ja nicht richtig verstanden, aber bei mir kommt 1 raus.

Delphi-Quellcode:
cStd:= StrToTime('08:00')+StrToTime('08:00')+StrToTime('08:00');
edDatumAus.Text:= FloatToStr(cStd);
Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Vergleich von 2 TDateTime's

  Alt 14. Feb 2009, 10:16
Zitat von Chemiker:
Hallo hoika,

vielleicht habe ich das ja nicht richtig verstanden, aber bei mir kommt 1 raus.

Delphi-Quellcode:
cStd:= StrToTime('08:00')+StrToTime('08:00')+StrToTime('08:00');
edDatumAus.Text:= FloatToStr(cStd);
Bis bald Chemiker
Durch das StrToTime() erzeugst du auch einen geanuen Wert. Bei TDateTime-Werten in der Praxis ist das oft nicht so.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:33 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