Ich hab's mir mal ganz einfach gemacht:
Delphi-Quellcode:
function EncodeDateTime0Based(AYear, AMonth, ADay: Integer): TDate;
begin
if AMonth < 0 then
begin
AYear := AYear + (AMonth div MonthsPerYear);
AMonth := AMonth mod MonthsPerYear;
end;
Result := EncodeDate(AYear+1,AMonth+1, 1);
// wir haben das Datum des 1. Tages im Monat
// nun werden einfach die Tage addiert (ADay darf auch negativ sein)
Result := Result + ADay;
end;