Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Datum generiert - teilweise seltsames ergebnis (https://www.delphipraxis.net/76872-datum-generiert-teilweise-seltsames-ergebnis.html)

bbBowser 11. Sep 2006 15:26


Datum generiert - teilweise seltsames ergebnis
 
hi leute, ich hab folgendes problem:
ich hab mir en code geschrieben, mit dem ich beliebige daten in reihe generieren und in einen array speichern kann(als tdatetime). das amcht er auch alles wunderbar, inclusive schaltjahre usw.. das problem taucht erst auf wenn der 31.12.2006 überschritten wird, da zeigt er mir nämlich in meiner listbox 7 mal 30.12.1899 an und macht dann bei 8.1.2007 wieder korrekt weiter, bis zum 25.01, denn der 26.01 ist wiederrum der 30.12.1899 und das wieder für 7 tage. das selbe wiederholt sich am 19.2, 16.3., wobei danach, zumindest das jahr 2007(soweit reciht meine anzeige) fehlerfrei ausgegeben wird.

ich hoffe ihr versteht mein problem und amcht mich bitte auf einen mathematischen fehler oder ähnliches aufmerksam, bzw habt eine lösung meines problems :-D . hier der relevante code:
Delphi-Quellcode:
day := 1;
month := 1;
year := 2006;
for d := 1 to 1000 do
begin

  date_dat_str[d] := StrToDate(inttostr(day)+'.'+inttostr(month)+'.'+inttostr(year));
  day := day+1;

  if (day > 31) and ((month = 1) or (month = 1) or (month = 3) or (month = 5) or (month = 7) or (month = 8) or (month = 10) or (month = 12))then
  begin
    day := 1;
    month := month+1;
  end;

  if (day > 30) and ((month = 4) or (month = 6) or (month = 9) or (month = 11))then
  begin
    day := 1;
    month := month+1;
  end;

  if (day > 29) and (month = 2) and ((year = 2008) or (year = 2012) or (year = 2016) or (year = 2020) or (year = 2024) or (year = 2028) or (year = 2032) or (year = 2036) or (year = 2040))then
  begin
    day := 1;
    month := month+1;
  end;

  if (day > 28) and (month = 2) and ((year <> 2008) and (year <> 2012) and (year <> 2016) and (year <> 2020) and (year <> 2024) and (year <> 2028) and (year <> 2032) and (year <> 2036) and (year <> 2040)) then
  begin
    day := 1;
    month := month+1;
  end;

  if month > 12 then
  begin
    month := 1;
    year := 2007;
  end;
dnke für eure hilfe im vorraus^^

mkinzler 11. Sep 2006 15:30

Re: Datum generiert - teilweise seltsames ergebnis
 
Warum verwendest du nicht einfach EncodeDate()?

s14 11. Sep 2006 15:32

Re: Datum generiert - teilweise seltsames ergebnis
 
Hallo,
ich habe mir jetzt nicht alles angesehen, aber ich glaube Du solltest dich mal mit der Unit "DateUtils" beschäftigen.
Da sind jede Menge Funktionen für Daten vorhanden, z.B. IsLeapYear für Schaltjahr usw.

Gruß
s14

Daniel B 11. Sep 2006 15:36

Re: Datum generiert - teilweise seltsames ergebnis
 
Wegen Schaltjahr sind da ein paar Möglichkeit gezeigt worden.

bbBowser 11. Sep 2006 16:12

Re: Datum generiert - teilweise seltsames ergebnis
 
danke für den hinweis, hab vorher im inet net viel über die befehle gefunden :-D . sorry dass ich gestört hab^^, dennoch frag ich mich woran meine ergebnisse liegen;)

carsten

marabu 11. Sep 2006 16:16

Re: Datum generiert - teilweise seltsames ergebnis
 
Hallo Carsten,

du störst ganz gewiss nicht. Die Regeln für Schaltjahre sind nunmal etwas komplexer. Und wenn du einen Monatsübertrag machst, warum dann nicht auch einen Jahresübertrag, anstelle das Jahr einfach auf 2007 zu setzen?

Nachtrag:

Dein Code scheint zu funktionieren, wenn man den Jahresübertrag korrigiert. Aber da ein Datum intern als der ganzzahlige Teil eines float-Wertes geführt wird, geht es alles auch einfacher:

Delphi-Quellcode:
uses
  Types; // TIntegerDynArray

const
  MAXDAYS = 1000;
var
  i, iStart: Integer;
  ida: TIntegerDynArray;
begin
  iStart := Trunc(EncodeDate(2006, 1, 1));
  SetLength(ida, MAXDAYS);
  for i := Low(ida) to High(ida) do
    ida[i] := iStart + i;
end;
Grüße vom marabu

bbBowser 11. Sep 2006 16:24

Re: Datum generiert - teilweise seltsames ergebnis
 
das is mir jetzt shcon etwas peinlich, danke :oops: . ich neig immer dazu alles komplizierter zu amchen als es ist^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz