Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Datum vergleichen und Ereignis ausgeben (https://www.delphipraxis.net/125287-datum-vergleichen-und-ereignis-ausgeben.html)

lima 3. Dez 2008 17:31


Datum vergleichen und Ereignis ausgeben
 
Ich wollte eine Routine für folgendes Szenario schreiben, bin aber hängengeblieben:

Zwischen dem 01.02.2009 und dem 10.02.2009 soll ein String ausgegeben werden.

Ich hatte bis jetzt folgenden Code:

Delphi-Quellcode:
var
  rtag, rmonat, rjahr  : Word;
  tag, monat, jahr   : Word;
  datum : TDate;
begin
  datum := EncodeDate(2009,02,01);
  DecodeDate (datum,rjahr,rmonat,rtag);
  DecodeDate (date,jahr,monat,tag);
  if (rmonat = monat) AND (rtag = tag) AND (rjahr=jahr) then
  showmessage ...
begin
  datum := EncodeDate(2009,02,02);
  DecodeDate (datum,rjahr,rmonat,rtag);
  DecodeDate (date,jahr,monat,tag);
  if (rmonat = monat) AND (rtag = tag) AND (rjahr=jahr) then
  showmessage ...
begin
...
begin
...
begin
...
begin
...
begin
...
begin
...
begin
...
begin
...
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
Damit ich nicht jedesmal eine Routine für jedes Datum zwischen dem 01.02.2009 und dem 10.02.2009 schreiben muß, hat da jemand eine Idee wie man das in komprimierter Form in einer Routine schreiben kann? Außerdem besteht das Problem, wenn der 01.02.2009 ist, dann funktioniert das Ganze und irgendein Datum nach dem 01.02.2009, dann funktioniert das Ganze nicht mehr, mit der Routine oben. Wäre schön wenn Jemand helfen könnte.

DeddyH 3. Dez 2008 17:44

Re: Datum vergleichen und Ereignis ausgeben
 
Kannst Du hiermit etwas anfangen?

Delphi-Quellcode:
uses DateUtils;

procedure ListDaysBetween(StartDate, EndDate: TDate; const sl: TStrings);
begin
  sl.BeginUpdate;
  try
    sl.Clear;
    while Trunc(StartDate) <= Trunc(EndDate) do
      begin
        sl.Add(FormatDateTime('dd.mm.yyyy',StartDate));
        StartDate := IncDay(StartDate,1);
      end;
  finally
    sl.EndUpdate;
  end;
end;
[edit] Code um überflüssige Variable gekürzt [/edit]

mkinzler 3. Dez 2008 17:45

Re: Datum vergleichen und Ereignis ausgeben
 
Dein Code ist sehr sinnvoll, weil:
-Du zur Erzeugung eines Datums, die Werte ja kennst ein anschlissendes Zerlegen ist deshalb überflüssig
-
Delphi-Quellcode:
if Trunc( Datum) = Trunc( rdatum)
das selbe bewirkt
Für eine Zeitspanne würde ich einfach überprüfen ob das Datum zwischen den Grenzdaten liegt und nicht für jedes Datum dazwischen überprüfen

lima 3. Dez 2008 17:49

Re: Datum vergleichen und Ereignis ausgeben
 
ICh werde das morgen mal probieren, muß erstmal meine Family versorgen, da meine Frau Spätschicht hat!

lima 3. Dez 2008 17:56

Re: Datum vergleichen und Ereignis ausgeben
 
Zitat:

Zitat von mkinzler
Für eine Zeitspanne würde ich einfach überprüfen ob das Datum zwischen den Grenzdaten liegt und nicht für jedes Datum dazwischen überprüfen

Ja, das wäre eine Idee, aber wie macht man das?

mkinzler 3. Dez 2008 17:58

Re: Datum vergleichen und Ereignis ausgeben
 
Delphi-Quellcode:
if (Trunc( AktDatum) > Trunc(StartDate)) and (Trunc( AktDatum) < Trunc( EndDate)) then ...

lima 3. Dez 2008 20:39

Re: Datum vergleichen und Ereignis ausgeben
 
Zitat:

Zitat von mkinzler
Delphi-Quellcode:
if (Trunc( AktDatum) > Trunc(StartDate)) and (Trunc( AktDatum) < Trunc( EndDate)) then ...

Danke!

lima 3. Dez 2008 21:15

Re: Datum vergleichen und Ereignis ausgeben
 
Ich hab jetzt folgendes, aber das klappt nicht.
Delphi-Quellcode:
procedure ListDaysBetween(StartDate, EndDate: TDate; const sl: TStrings);
begin
  sl.BeginUpdate;
  try
    sl.Clear;
    while Trunc('01.02.2009') <= Trunc('10.02.2009') do
      begin
        sl.Add(FormatDateTime('01.02.2009',StartDate));
        StartDate := IncDay(StartDate,1);
      end;
  finally
    sl.EndUpdate;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
  Aktdatum : TDate;
begin
  if (Trunc(Aktdatum) > Trunc('01.02.2009')) and (Trunc(Tdate) < Trunc('10.02.2009')) then
showmessage ...
end;

mkinzler 3. Dez 2008 21:18

Re: Datum vergleichen und Ereignis ausgeben
 
Delphi-Quellcode:
AktDatum := Date();

lima 3. Dez 2008 21:37

Re: Datum vergleichen und Ereignis ausgeben
 
Also irgendwo hängts jetzt bei mir, das will einfach net klappen
Das Programm soll ja nur prüfen, ob das Datum zwischen dem 01.02.2009 und dem 10.02.2009 liegt und dann eine Messaage ausgeben. Die Message würde funktionieren, nur die Überprüfung irgendwie nicht.

If Datum zwischen dem 01.02.2009 und dem 10.02.2009 liegt, then

Delphi-Quellcode:
procedure ListDaysBetween(StartDate, EndDate: TDate; const sl: TStrings);
begin
  sl.BeginUpdate;
  try
    sl.Clear;
    while Trunc('01.02.2008') <= Trunc('10.02.2009') do
      begin
        sl.Add(FormatDateTime('01.02.2009',StartDate));
        StartDate := IncDay(StartDate,1);
      end;
  finally
    sl.EndUpdate;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  Aktdatum : Date;
  Startdate : TStrings;
begin
  if (Trunc(Aktdatum) > Trunc(Startdate))) and (Trunc(Tdate) < Trunc(EndDate))) then
showmessage ...
end;

mkinzler 3. Dez 2008 21:48

Re: Datum vergleichen und Ereignis ausgeben
 
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  Aktdatum, StartDate, EndDate : Date;
begin
  AktDate := Date(); //Aktuelles Datum
  StartDate := EncodeDate( <Jahr>, <Monat>, <Tag>);
  EndDate := ...
  if (Trunc(Aktdatum) > Trunc(Startdate))) and (Trunc(Tdate) < Trunc(EndDate))) then
StartDate und Enddate natürlich auch passende Werte zuweisen.

nahpets 4. Dez 2008 09:12

Re: Datum vergleichen und Ereignis ausgeben
 
Hallo,

Vorsicht, hier ist ein riesengroßer Fehler drin:
Delphi-Quellcode:
procedure ListDaysBetween(StartDate, EndDate: TDate; const sl: TStrings);
begin
  sl.BeginUpdate;
  try
    sl.Clear;
    while Trunc('01.02.2008') <= Trunc('10.02.2009') do // <-- Endlosschleife!!!
      begin
        sl.Add(FormatDateTime('01.02.2009',StartDate));
        StartDate := IncDay(StartDate,1);
      end;
  finally
    sl.EndUpdate;
  end;
end;
Die konstanten Werte im while ändern sich nie, daher kommt man aus der Schleife niemehr raus.

So könnte es funktionieren, da sich dann StartDate bei jedem Schleifendurchlauf erhöht und irgendwann größer oder gleich EndDate sein wird.
Delphi-Quellcode:
 while Trunc(StartDate) <= Trunc(EndDate) do

DeddyH 4. Dez 2008 09:17

Re: Datum vergleichen und Ereignis ausgeben
 
Wenn ich schon fertigen Quellcode abliefere, wieso muss der dann noch geändert werden? Ist mir zu hoch. OK, ich hatte wohl auch das Anliegen nicht ganz verstanden, ich dachte, es geht darum, alle Tage zwischen 2 Datumsangaben auszugeben.

lima 4. Dez 2008 18:43

Re: Datum vergleichen und Ereignis ausgeben
 
Funzt jetzt alles, danke nochmal an alle Mitwirkenden, besonders an mkinzler!


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