AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Datum generiert - teilweise seltsames ergebnis
Thema durchsuchen
Ansicht
Themen-Optionen

Datum generiert - teilweise seltsames ergebnis

Ein Thema von bbBowser · begonnen am 11. Sep 2006 · letzter Beitrag vom 11. Sep 2006
Antwort Antwort
bbBowser
(Gast)

n/a Beiträge
 
#1

Datum generiert - teilweise seltsames ergebnis

  Alt 11. Sep 2006, 15:26
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 . 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^^
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Datum generiert - teilweise seltsames ergebnis

  Alt 11. Sep 2006, 15:30
Warum verwendest du nicht einfach EncodeDate()?
Markus Kinzler
  Mit Zitat antworten Zitat
s14

Registriert seit: 15. Mai 2003
Ort: München
251 Beiträge
 
Delphi 7 Architect
 
#3

Re: Datum generiert - teilweise seltsames ergebnis

  Alt 11. Sep 2006, 15:32
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
  Mit Zitat antworten Zitat
Benutzerbild von Daniel B
Daniel B

Registriert seit: 27. Okt 2005
Ort: Dachau
453 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Datum generiert - teilweise seltsames ergebnis

  Alt 11. Sep 2006, 15:36
Wegen Schaltjahr sind da ein paar Möglichkeit gezeigt worden.
Servus...
  Mit Zitat antworten Zitat
bbBowser
(Gast)

n/a Beiträge
 
#5

Re: Datum generiert - teilweise seltsames ergebnis

  Alt 11. Sep 2006, 16:12
danke für den hinweis, hab vorher im inet net viel über die befehle gefunden . sorry dass ich gestört hab^^, dennoch frag ich mich woran meine ergebnisse liegen

carsten
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Datum generiert - teilweise seltsames ergebnis

  Alt 11. Sep 2006, 16:16
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
  Mit Zitat antworten Zitat
bbBowser
(Gast)

n/a Beiträge
 
#7

Re: Datum generiert - teilweise seltsames ergebnis

  Alt 11. Sep 2006, 16:24
das is mir jetzt shcon etwas peinlich, danke . ich neig immer dazu alles komplizierter zu amchen als es ist^^
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:02 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