Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

DaysInAMonth vs. DaysInMonth

  Alt 4. Nov 2020, 16:37
Delphi-Version: 5
Hi zusammen

Ich bearbeite gerade ein Uraltprogramm, das ich seinerzeit mit Delphi2007 zuletzt gespeichert habe - aktuell gibt mir eine Methode in einem Stringgrid einen vollen Monat ab einem gegebenen Datum aus, wobei die volle Woche auch dann ausgegeben wird, wenn das gegebene Datum (immer der erste des gewünschten Monats) ein Freitag oder sogar ein Sonntag ist(ähnlich der VCL-Komponente).
Berechnet werden Wochen ausschliesslich mit dem Montag als Starttag.
Noch unbestimmt ist allerdings das Ende des angezeigten Monats. Die Prozedur:
Delphi-Quellcode:
procedure Ta.BtnZweiHorzWeeksMontagClick(Sender: TObject);
  var i,j,y, Nr,x : Integer; Jahr,Woche: Word;
       Today : String;ADate,Datum:TDateTime;
begin
   ADate := DateTimePicker2.Date; //Übergeben des Anfangdatums
   Nr := DayofTheWeek(ADate); //Tagesnummer ermitteln : 1. Wochentag := Montag
   Today := Wochentage[(NR-(NR-1))];
   Datum := (ADate-(NR-1));
   i := 0;
   j := 2;
   x := 1;
   y :=1;
   while i <=6 do // Dies schreibt 7 Wochenblöcke ins Stringgrid
   begin
      inc(i);
      while j <= 8 do begin
         if j = 2 then begin
           DateToWeek(Datum, Woche, Jahr);
           StrG_HoizontalWochen.Cells[y,x] := 'Woche '+IntToStr(Woche); {1 ist die Spalte,  X ist die Zeile}
         end;
         StrG_HoizontalWochen.Cells[0,j]:= Today;
         StrG_HoizontalWochen.Cells[y,j]:= DateToStr(Datum);
         Inc(j);
         Datum := Datum +1;
         Nr := DayofTheWeek(Datum); //Tagesnummer ermitteln : 1. Wochentag Montag
         Today := Wochentage[Nr];
      end;
      Inc(y);
      j := 2;
   end;
end;
Das sieht dann so aus:
wochenkalender-2.jpg
In diesem Fall ist der letzte Januar bereits in der zweitletzten Woche und die restlichen Tage als die des Folgemonats eingetragen. Es dürften allerdings nur gerade die letzen Tage der letzten Woche bis zum Monatsende eingetragen sein - so, wie es in TMonthCalendar gelöst ist.

Da bieten sich nun die beiden Funktionen aus dem Titel an. Wobei die eine allerdings expliziit das Jahr und den Monat benötigt und die andere nur gerade einen TDateTime-Wert.
Kann es sein, dass sich die beiden in der Zuverlässigkeit unterscheiden(29. Februar)?

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat