Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi CompareDateTime unter TD 2006 ? (https://www.delphipraxis.net/88795-comparedatetime-unter-td-2006-a.html)

Ajin 21. Mär 2007 09:16


CompareDateTime unter TD 2006 ?
 
Guten Morgen!

Also mein Programm läuft Tag und Nacht.
Ab genau 01:00 Uhr möchte ich, dass eine Variable auf TRUE gesetzt wird.
Ab 08:00 Uhr wieder auf FALSE.

Ist ein Uhrzeitvergleich ausreichend oder sollte ich das Datum mitprüfen?

Nun hab ich über die Forensuche festgestellt, dass diese Datum/Uhrzeit Vergleiche recht oft disskutiert wurden. Dabei wird häufig auf eine CompareDateTime Funktion verwiesen.

Delphi-Quellcode:
Unit
DateUtils
...
procedure TFlogin.Button1Click(Sender: TObject);
begin
 if CompareDateTime(now, StrToDateTime('21.03.2007 10:08:00')) = LessThanValue
 then showmessage('now liegt vor 21.03.2007 10:08:00')
 else showmessage('now liegt hinter 21.03.2007 10:08:00');
end;
Das Lessthanvalue ist noch unbekannt, hab auch ne variable -> ergebnis: TValueRelationship deklariert, ging aber auch nicht. Funktioniert mein Vorhaben mit CompareDateTime oder reicht auch ein CompareTime?
Bzw. wie bekomme ich das ohne Fehler kompiliert ;P

shmia 21. Mär 2007 10:18

Re: CompareDateTime unter TD 2006 ?
 
Delphi-Quellcode:
function MittenInDerNacht(zeit:TDateTime):boolean;
var
   startzeit, endzeit: TDatetime;
begin
   zeit := Frac(zeit);  // Uhrzeit Anteil abtrennen; das Datum wird also ausgeblendet
   startzeit := EncodeTime(1,0,0,0); // 1 Uhr
   endzeit := EncodeTime(8,0,0,0);   // 8 Uhr
   result := (zeit >= startzeit) and zeit <= endzeit);
end;

Ajin 21. Mär 2007 10:51

Re: CompareDateTime unter TD 2006 ?
 
Oh vielen Dank für die Antwort!
Ich hab in der Zwischenzeit folgendes zusammengeschustert:


Delphi-Quellcode:
function DateTimeDiff_m(date1, date2: TDateTime): string;
var days, hours, minutes, secs: integer;
  difference: real;
begin
  difference:=date2-date1;
  days:=round(difference-Frac(difference));
  difference:=Frac(difference)*24;
  hours:=round(difference-Frac(difference));
  difference:=Frac(difference)*60;
  minutes:=round(difference-Frac(difference));
  difference:=Frac(difference)*60;
  secs:=round(difference-Frac(difference));
  result:=IntToStr(minutes);
end;
Der Aufruf z.B.

Delphi-Quellcode:
procedure TFlogin.Button1Click(Sender: TObject);
begin
if StrToInt(DateTimeDiff_m(now, StrToDateTime('22.03.2007 01:00:00'))) < 0 then
begin
  //Variable auf True setzen weil die Minuten ins negative gehen
  //andere Anweisungen
end
 else
  begin
  //Variable auf FALSE setzen, der result ist noch positiv
  //andere Anweisungen
  end;
Ich teste gleich mal shimas version!

Ajin 21. Mär 2007 10:59

Re: CompareDateTime unter TD 2006 ?
 
Ich nochmal!

Also die Funktion von shmia läuft ebenfalls und ist 1000 mal intelligenter als meine knauperei.
Es fehlte nur ein kleines Klämmerchen :thumb:

Delphi-Quellcode:
function MittenInDerNacht(zeit:TDateTime):boolean;
var
   startzeit, endzeit: TDatetime;
begin
   zeit := Frac(zeit);  // Uhrzeit Anteil abtrennen; das Datum wird also ausgeblendet
   startzeit := EncodeTime(1,0,0,0); // 1 Uhr
   endzeit := EncodeTime(8,0,0,0);   // 8 Uhr
   result := (zeit >= startzeit) and [b]([/b]zeit <= endzeit);
end;
Super Danke !

fLaSh11 21. Mär 2007 12:48

Re: CompareDateTime unter TD 2006 ?
 
Bitte keine HTML-Tags im Delphi Quellcode.
1. Funktioniert's nicht :)
2. Verwirrten sie...


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:18 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