![]() |
Delphi-Version: 5
Date Vergleich
Hallo,
ich habe ein seltsames Problem. Ich vergleiche Dates miteinander und bekomme auf unterschiedlichen Systemen unterschiedliche Ergebnisse: Beispielsweise überprüfe ich ob ein Ereignis innerhalb eines Zeitraumes liegt. Mein Code:
Code:
Auf Maschine 1 funktioniert das korrekt.
...
var start: TDate; ende: TDate; ereignis: TDate; begin ... if (ereignis >= start) and (ereignis <= ende) then ... Auf Maschine 2 läuft er mir einen Tag zu spät in die Schleife, wenn start gleich ereignis ist. Wenn ich mit CompareDate arbeite läufts bei beiden Maschinen. Hat jemand eine Idee warum das so ist? Vielen Dank. Gruß mc |
AW: Date Vergleich
AFAIK enthalten auch TDate-Variablen einen Zeitanteil. Funktioniert es, wenn Du den jeweils mit DateOf nullst?
Delphi-Quellcode:
if (DateOf(ereignis) >= DateOf(start)) and
(DateOf(ereignis) <= DateOf(ende)) then |
AW: Date Vergleich
Stimmt, hab's eben ausprobiert: Mit DateOf(Datum) erfolgt die Berechnung korrekt.
![]()
Delphi-Quellcode:
procedure TFormMain.Button1Click(Sender: TObject);
Var start, ende, ereignis : TDate; Aus : String; begin start := DateOf(StrToDate('01.03.2014')); ende := DateOf(StrToDate('30.04.2014')); ereignis := DateOf(DateTimePicker1.Date); if (ereignis >= start) and (ereignis <= ende) then Aus := 'innerhalb' else Aus := 'außerhalb'; ShowMessage(Aus); end; |
AW: Date Vergleich
Das ist nicht seltsam, sondern liegt in der Natur der Sache begründet.
![]() ![]() ![]() |
AW: Date Vergleich
Zitat:
|
AW: Date Vergleich
Zitat:
|
AW: Date Vergleich
Vielen Dank für eure Antworten.
ich dachte mir ursprünglich auch, dass es an einem Zeitanteil scheitern könnte, aber da der Typ ja nicht Datetime sondern Date ist, dachte ich der Zeitanteil wird dabei ignoriert. Alles klar, dann werde ich in Zukunft vergleiche mit CompareDate machen. |
AW: Date Vergleich
TDate und TTime haben grundsätzlich erstmal nur syntaktischen Charakter, also mehr für den Programmierer.
Intern sind TDateTime, TDate und TTime alle gleich (Double) und könnten sowohl Uhrzeit, als auch Datum enthalten. (wenn derjenige nicht aufpasst, welcher diese Typen/Variablen mit Werten füllt) |
AW: Date Vergleich
TDateTimePicker hat schon seit ewigen Zeiten einen Bug.
Wenn man das
Delphi-Quellcode:
abfragt würde man ja erwarten dass man nur den Datumsanteil bekommt.
Property [TDateTimePicker].Date
Schlieslich gibt es auch noch die Properties
Delphi-Quellcode:
und
DateTime
Delphi-Quellcode:
.
Time
Man bekommt aber das Datum + aktuelle Uhrzeit zurück. Abhilfe bringt die Zeile:
Delphi-Quellcode:
Die anderen DateOf() bei StrToDate() braucht man nicht.
ereignis := DateOf(DateTimePicker1.Date);
Möglicherweise hat man sich später nicht mehr getraut diesen Bug abzustellen weil dies existierenden Code brechen könnte... |
AW: Date Vergleich
Ich glaub den Bug hat man inzwischen sogar "schon" behoben. (in irgendeinem der XEs)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 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