AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Datum bestimmen von z.B. 3. Sonntag jedes Monats
Thema durchsuchen
Ansicht
Themen-Optionen

Datum bestimmen von z.B. 3. Sonntag jedes Monats

Ein Thema von AndreasZZZ · begonnen am 30. Jul 2003 · letzter Beitrag vom 1. Aug 2003
Antwort Antwort
AndreasZZZ

Registriert seit: 30. Jul 2003
11 Beiträge
 
Delphi 7 Professional
 
#1

Datum bestimmen von z.B. 3. Sonntag jedes Monats

  Alt 30. Jul 2003, 16:50
Hallo,

ich bin echt am verzweifeln, denn ich suche nun schon seit gestern alles Mögliche und Unmögliche zum Thema Datum-Berechnung in Delphi aber bei meinem Problem bin ich kein bisschen weiter.

Ich muss das Datum berechnen des nächsten x. Wochentages eines Monats, d.h. vom aktuellen Tag ausgehen und bestimmen wann ist z.B. der nächste 3. Sonntag eines Monats.

Z.B. nehmen wir mal an:
heute ist Mittwoch, der 16.07.2003
- gesuchter Tag: der nächste 3. Sonntag eines Monats, d.h. 20.07.2003 oder
- gesuchter Tag: der nächste 2. Sonntag eines Monats, d.h. 10.08.2003

Es soll eine Funktion sein, die etwa wie folgt aussehen
function Get_next_Wochentag_pro_Monat(iWelcher, iWochentag: Integer): TDateTime;

mit iWelcher=1 bis 5, d.h. x. Wochentag
mit iWochentag=1 bis 7 analog DayOfWeek, d.h. Sonntag=1 und Samstag=7

Somit würde um bei obigem Beispiel zu bleiben:
- Get_next_Wochentag_pro_Monat(3,1) den 20.07.2003
- Get_next_Wochentag_pro_Monat(2,1) den 10.08.2003
zurückliefern, wenn heute der 16.07.2003 wäre.

Ich bin echt am verzweifeln. Hat jemand eine Idee?

Bye
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Duffy
Duffy

Registriert seit: 19. Mär 2003
Ort: Wuppertal
835 Beiträge
 
Delphi 3 Standard
 
#2

Re: Datum bestimmen von z.B. 3. Sonntag jedes Monats

  Alt 30. Jul 2003, 18:44
Hallo AndreasZZZ,
ich nehme an, daß es sich hier um eine Hausaufgabe handelt. Aber da Dir noch keiner einen Lösungsansatz geboten hat, habe ich mal auf die Schnelle deine Funktion realisiert. Zumindest bringt sie die gewünschten Ergebnisse.

Vielleicht weiß noch jemand einen anderen Lösungsansatz. Mir fiel jedenfalls im Moment auch nichts Besseres ein, als durch den Monat zu iterieren und die Anzahl der gesuchten Wochentage zu zählen.
Delphi-Quellcode:
function Get_next_Wochentag_pro_Monat(iWelcher, iWochentag: Integer; BaseDate: TDateTime): TDateTime;
var
  I: Integer;
  Day, Month, Year: Word;
  Times: Integer;
begin
  Times := 0;
  DecodeDate(BaseDate, Year, Month, Day);
  if Day > (iWelcher * 7) then
  begin
    if Month < 12 then
    begin
      Inc(Month, 1);
    end
    else
    begin
      Month := 1;
      Inc(Year, 1);
    end;
  end;
  Result := EncodeDate(Year, Month, 1) + Frac(BaseDate);
  for I := 1 to 31 do
  begin
    if DayOfWeek(Result) = iWochentag then
    begin
      Inc(Times, 1);
      if Times = iWelcher then
      begin
        Break;
      end
    end;
    Result := Result + 1;
  end;
end;
bye
Angehängte Dateien
Dateityp: zip get_next_wochentag_pro_monat.zip (227,4 KB, 5x aufgerufen)
Künftige Generationen wollen ihre Fehler selber machen.
Jedes Programm wird nie das können, was Du wirklich brauchst.
Das Gegenteil von gut ist gut gemeint
-----
  Mit Zitat antworten Zitat
AndreasZZZ

Registriert seit: 30. Jul 2003
11 Beiträge
 
Delphi 7 Professional
 
#3

Re: Datum bestimmen von z.B. 3. Sonntag jedes Monats

  Alt 31. Jul 2003, 07:48
Hallo,

danke für Deine Hilfe. So einen ähnlichen Ansatz hatte ich auch schon, bin aber nicht ganz so weit gekommen.

Allerdings funktioniert die Funktion noch nicht so 100%ig.

Der August hat 5 Sonntage, d.h. ein Aufruf von

Get_next_Wochentag_pro_Monat(5,1,now) sollte den 31.08.2003 zurückliefern. Es liefert aber den 01.08.2003 zurück.

Kann ich da noch einmal um Hilfe bitten?

Thanks und bye
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Duffy
Duffy

Registriert seit: 19. Mär 2003
Ort: Wuppertal
835 Beiträge
 
Delphi 3 Standard
 
#4

Re: Datum bestimmen von z.B. 3. Sonntag jedes Monats

  Alt 31. Jul 2003, 08:35
Hallo AndreasZZZ,
jetzt geht es, ich glaube aber Du solltest aber auch Einsatz zeigen.
Delphi-Quellcode:
function Get_next_Wochentag_pro_Monat(iWelcher, iWochentag: Integer; BaseDate: TDateTime): TDateTime;
var
  I: Integer;
  Day, Month, Year: Word;
  Times: Integer;
begin
  if not(iWelcher in [1..5]) then
  begin
    ShowMessage('Blödsinnige Eingabe. Bitte wiederholen');
    Exit;
  end;
  Times := 0;
  DecodeDate(BaseDate, Year, Month, Day);
  if Day > (iWelcher * 7) then
  begin
    if Month < 12 then
    begin
      Inc(Month, 1);
    end
    else
    begin
      Month := 1;
      Inc(Year, 1);
    end;
  end;
  Result := EncodeDate(Year, Month, 1) + Frac(BaseDate);
  for I := 1 to 31 do
  begin
    if DayOfWeek(Result) = iWochentag then
    begin
      Inc(Times, 1);
      if Times = iWelcher then
      begin
        Break;
      end
    end;
    Result := Result + 1;
  end;
  if Times < iWelcher then
  begin
    Result := Get_next_Wochentag_pro_Monat(iWelcher, iWochentag, Result);
  end;
end;
bye
Angehängte Dateien
Dateityp: zip get_next_wochentag_pro_monat2.zip (232,5 KB, 6x aufgerufen)
Künftige Generationen wollen ihre Fehler selber machen.
Jedes Programm wird nie das können, was Du wirklich brauchst.
Das Gegenteil von gut ist gut gemeint
-----
  Mit Zitat antworten Zitat
AndreasZZZ

Registriert seit: 30. Jul 2003
11 Beiträge
 
Delphi 7 Professional
 
#5

Re: Datum bestimmen von z.B. 3. Sonntag jedes Monats

  Alt 31. Jul 2003, 10:26
Hallo,

danke noch einmal und ich zeige auch selbst Einsatz aber wenn ich ganz ehrlich bin, habe ich bei diesen ganzen Datumsberechnungen ziemlich Probleme, sonst hätte ich auch hier nicht um Hilfe gefragt.

Die Funktion hat immer noch ein kleines Problem und so leid es mir auch tut, ich habe keine Ahnung was ich tun soll um das Problem zu beheben.

Wenn ich die Funktion starte mit

Get_next_Wochentag_pro_Monat(5,4,now) d.h. ich will den nächsten 5. Mittwoch des Monats wissen. Im August gibt es keinen 5. Mittwoch. Der nächste 5. Mittwoch ist der 29.10.2003.

Die Funktion liefert aber den 30.07.2003 zurück.

Sorry wenn ich wieder um Hilfe frage aber ich habe da echt Probleme.

Bye
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Duffy
Duffy

Registriert seit: 19. Mär 2003
Ort: Wuppertal
835 Beiträge
 
Delphi 3 Standard
 
#6

Re: Datum bestimmen von z.B. 3. Sonntag jedes Monats

  Alt 31. Jul 2003, 18:06
Hallo AndreasZZZ,
so, jetzt der letzte Versuch ...
Delphi-Quellcode:
function Get_next_Wochentag_pro_Monat(iWelcher, iWochentag: Integer; BaseDate: TDateTime): TDateTime;
var
  I: Integer;
  BaseDay, BaseMonth, BaseYear: Word;
  Day, Month, Year: Word;
  Times: Integer;
begin
  Result := 0;
  DecodeDate(BaseDate, BaseYear, BaseMonth, BaseDay);
  if not(iWelcher in [1..5]) then
  begin
    ShowMessage('Blödsinnige Eingabe. Bitte wiederholen');
    Exit;
  end;
  Times := 0;
  DecodeDate(BaseDate, Year, Month, Day);
  if Day > (iWelcher * 7) then
  begin
    if Month < 12 then
    begin
      Inc(Month, 1);
    end
    else
    begin
      Month := 1;
      Inc(Year, 1);
    end;
  end;
  Result := EncodeDate(Year, Month, 1) + Frac(BaseDate);
  for I := 1 to 31 do
  begin
    if DayOfWeek(Result) = iWochentag then
    begin
      Inc(Times, 1);
      if Times = iWelcher then
      begin
        Break;
      end
    end;
    Result := Result + 1;
  end;
  DecodeDate(Result, Year, Month, Day);
  if (Times < iWelcher) or (Baseday > Day) or (BaseMonth <> Month) then
  begin
    BaseDay := 1;
    if BaseMonth < 12 then
    begin
      Inc(BaseMonth, 1);
    end
    else
    begin
      BaseMonth := 1;
      Inc(BaseYear, 1);
    end;
    BaseDate := EncodeDate(BaseYear, BaseMonth, 1) + Frac(BaseDate);
    Result := Get_next_Wochentag_pro_Monat(iWelcher, iWochentag, BaseDate);
  end;
end;
bye
Angehängte Dateien
Dateityp: zip get_next_wochentag_pro_monat3.zip (232,8 KB, 10x aufgerufen)
Künftige Generationen wollen ihre Fehler selber machen.
Jedes Programm wird nie das können, was Du wirklich brauchst.
Das Gegenteil von gut ist gut gemeint
-----
  Mit Zitat antworten Zitat
AndreasZZZ

Registriert seit: 30. Jul 2003
11 Beiträge
 
Delphi 7 Professional
 
#7

Re: Datum bestimmen von z.B. 3. Sonntag jedes Monats

  Alt 1. Aug 2003, 07:32
Hallo,

danke für Deine Hilfe. Die Funktion scheint nun wirklich alle möglichen Fälle abzudecken.

Ohne Dich wäre ich wahrscheinlich nie auf die Lösung gekommen.

Bye
Andreas
  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 02:54 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