Autor Beitrag
Ace
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37

WinXP
Delphi 7 Pers. / Turbo Delphi.NET
BeitragVerfasst: Di 29.03.05 13:20 
Ich würde gerne zu einem TDateTime Wert eine bestimmte Anzahl an Tagen, Monaten und Jahren addieren.
Wenn ich also z.B. das Datum 29.03.2005 habe und 2 Monate hinzurechne soll der 29.05.2005 dabei rauskommen;
wenn ich noch 5 Jahre hinzurechne der 29.05.2010 usw.
Tage hinzurechnen ist ja nicht das Problem, aber für die Jahre und Monate habe ich noch keine passende Idee. Ich könnte das ganze in Tage umrechnen und dann addieren aber dann habe ich ja bei den Monaten das Problem mit der Anzahl der Tage (Januar 31 Tage, Februar 28/29 Tage...).
Das musst ja auch einfacher gehen. Hat da jemand eine gute Idee?
fvolk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 203

Win XP (Home & Pro)
Delphi 2005 Pers
BeitragVerfasst: Di 29.03.05 13:26 
Schau mal in die Delphi-Hilfe nach dem Thema "DateUtils (Routinen)".

Da findest du Infos zu IncDay, IncHour etc.

Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var
  NaechsteWoche: TDateTime;
begin
  NaechsteWoche := IncWeek(now, 1);
end;

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist überzeugt, dass er genug davon habe.
(René Descartes)
Holgerwa
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 325

WIN XP Pro, Vista Business
Delphi 7 Pro, BDS 2006 Pro
BeitragVerfasst: Di 29.03.05 13:29 
Hallo,

machs doch so:
1) TDateTime mit "DecodeDate" in Tage, Monate und Jahre umwandeln
2) Beliebige Werte verändern
3) Geänderte Tage, Monate und Jahre mit "EncodeDate" wieder zurück in TDateTime wandeln.

Holger
Ace Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37

WinXP
Delphi 7 Pers. / Turbo Delphi.NET
BeitragVerfasst: Di 29.03.05 15:05 
@ fvolk: Das wäre zu schon um wahr zu sein. Habe diese Funktionen leider nicht (Delphi 5). Lass mich raten, diese Funktionen gibt es erst ab Delphi 6 oder?
Werde mal den D6 Source nach diesen Funktionen durchwühlen. Kannst du mir vielleicht verraten welche Unit da ist?

EDIT: IncMonth gibts es aber kein IncDay oder IncHour. Ein IncYear wäre auch klasse gewesen :?

@ Holgerwa: Hab ich auch schon dran gedacht doch was ist wenn mein Monat 5 ist und ich 12 Monate addieren möchte? Das geht leider nicht weil so ein Jahreswechsel mit drin wäre.
fvolk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 203

Win XP (Home & Pro)
Delphi 2005 Pers
BeitragVerfasst: Di 29.03.05 15:16 
Die Unit heißt DateUtils.pas und liegt bei mir in \Source\Rtl\Common. Seit wann die Unit bei Delphi dabei ist, kann ich dir leider nicht genau sagen.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist überzeugt, dass er genug davon habe.
(René Descartes)
Ace Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37

WinXP
Delphi 7 Pers. / Turbo Delphi.NET
BeitragVerfasst: Mi 30.03.05 10:14 
Ich werde es jetzt einfach so machen:

Tage ganz normal hinzuaddieren, Monate mit IncMonth und für die Jahre benutze ich DecodeDate, addiere die Jahre und baue das Datum mit EncodeDate wieder zusammen. Solle gehen.

Danke!
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: Mi 30.03.05 10:35 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function IncDay(const Date: TDateTime; NumberOfDays: Integer): TDateTime;
begin
  Result := Date + NumberOfDays;
end;


ausblenden Delphi-Quelltext
1:
2:
3:
4:
function IncYear(const Date: TDateTime; NumberOfYears: Integer): TDateTime;
begin
  Result := IncMonth(Date, NumberOfYears * 12);
end;

_________________
Ciao, Sprint.