Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi DaysInAMonth vs. DaysInMonth (https://www.delphipraxis.net/205963-daysinamonth-vs-daysinmonth.html)

Delbor 4. Nov 2020 16:37

Delphi-Version: 5

DaysInAMonth vs. DaysInMonth
 
Liste der Anhänge anzeigen (Anzahl: 1)
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:
Anhang 53224
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

bcvs 4. Nov 2020 16:59

AW: DaysInAMonth vs. DaysInMonth
 
DaysInMonth ruft intern DaysInAMonth auf.
Sollte also kein Unterschied sein.

Delbor 4. Nov 2020 17:02

AW: DaysInAMonth vs. DaysInMonth
 
Hi bcvs

Vielen Dank!


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