Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Anzahl Tage im Monat (https://www.delphipraxis.net/130853-anzahl-tage-im-monat.html)

IIIMADDINIII 14. Mär 2009 10:40

Re: Anzahl das im Monat
 
warum kann man nicht das mit dem schaltjahr so leicht herausfinden??

mkinzler 14. Mär 2009 10:42

Re: Anzahl das im Monat
 
Zitat:

Zitat von IIIMADDINIII
warum denn nicht??

Warum das Rad neu erfinden? Zudem ist der Algorithmus etwas komplizierter (Schaltjahre usw)
@Susanne: Gibt es vielleicht eine gleichnamige Funktion aus einer anderen Unit als DateUtils, welche vorher eingebunden wird?

Luckie 14. Mär 2009 10:43

Re: Anzahl das im Monat
 
Keine Ahnung, was du falsch machst, aber bei mir funktioniert das:
Delphi-Quellcode:
uses
  DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var
  days: Cardinal;
begin
  days := DaysInMonth(now);
  ShowMessage(IntToStr(days));
end;

Susanne 14. Mär 2009 10:51

Re: Anzahl Tage im Monat
 
ok, man sollte den Wert vielleicht auch aus der Funktion wieder zurückgeben, sobald ich dies an result übergebe funktioniert es auch.

Trotzdem vielen Dank für eure Hilfe. Ich hab vermutet, es musste irgendeine "Kleinigkeit" sein.

IIIMADDINIII 14. Mär 2009 10:59

Re: Anzahl Tage im Monat
 
sonst dieses script hätte auch funkitioniert
Delphi-Quellcode:
function TForm1.getdaysinmonth(date: TDATETIME): integer;
const
   monthday: array[1..12] of integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
begin
if strtoint(formatdatetime('m', date)) <> 2 then
begin
  result := monthday[strtoint(formatdatetime('m', date))];
end
else
begin
  if round(strtoint(formatdatetime('yyyy', date)) / 4) = strtoint(formatdatetime('yyyy', date)) / 4 then result := 29
  else result := 28;
end;
end;

Sunlight7 14. Mär 2009 11:02

Re: Anzahl Tage im Monat
 
Zitat:

Zitat von IIIMADDINIII
sonst dieses script hätte auch funkitioniert

Nein, wie schon erwähnt ist nicht jedes 4 Jahr ein Schaltjahr ;)

IIIMADDINIII 14. Mär 2009 11:03

Re: Anzahl Tage im Monat
 
seit wann denn das

Luckie 14. Mär 2009 11:04

Re: Anzahl Tage im Monat
 
Noch mal, es reicht nicht zu überprüfen ob ein Jahr durch vier Teilbar ist, um herauszufiden, ob es sich ume ine Schaltjahr handelt:
Zitat:

Die vorherige julianische Schalttagsregelung wurde gleichzeitig dahingehend modifiziert, dass in alle Jahre, die nach Division durch vier eine natürliche Zahl ergeben, der 29. Februar als Schalttag eingefügt wird. Ausgenommen von dieser Schaltjahresregelung sind volle Jahrhunderte, die nicht glatt durch 400 teilbar sind.
Zitat:

Zitat von IIIMADDINIII
seit wann denn das

Seit wir vom Julianischen Kalender zum Gregorianischen umgestellt haben. Und das war nicht erst gestern. ;)

IIIMADDINIII 14. Mär 2009 11:07

Re: Anzahl Tage im Monat
 
dann fügt man das einfach mit hinzu
Delphi-Quellcode:
function TForm1.getdaysinmonth(date: TDATETIME): integer;
const
   monthday: array[1..12] of integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
begin
if strtoint(formatdatetime('m', date)) <> 2 then
begin
  result := monthday[strtoint(formatdatetime('m', date))];
end
else
begin
  if (round(strtoint(formatdatetime('yyyy', date)) / 4) = strtoint(formatdatetime('yyyy', date)) / 4) and not(round(strtoint(formatdatetime('yyyy', date)) / 400) = strtoint(formatdatetime('yyyy', date)) / 400) then result := 29
  else result := 28;
end;
end;
wo ist das problem??

mkinzler 14. Mär 2009 11:08

Re: Anzahl Tage im Monat
 
@IIIMADDINIII:Dein Code hat mehrere Probleme:
1. Parametername Date: Ist auche ien Funktion. Es ist nicht sichergestellt, das der richtige Wert verwendet wird.
2. Ablage der Werte in einem array ist überflüssig.
3. Wandlung DateTime->String->Integer ist aufwendig besser gleich in einen Integer wandeln (DecodeDate())
4. Der Algorithmus ist komplexer:
Wenn durch 4 teilbar aber nicht durch 100 (nur wenn durch 400 teilbar sind)
1900 war kein Schaltjahr aber 2000.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:32 Uhr.
Seite 2 von 4     12 34      

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