Einzelnen Beitrag anzeigen

heiopei
(Gast)

n/a Beiträge
 
#11

Re: problem bei "selbstgerschriebenem" decodedate.

  Alt 13. Mai 2005, 20:46
abend,

Zitat:
@heiopei: Hast du denn verstanden, dass ich deine Frage nach der Fehlerursache beantwortet hatte?
ich versteh den sinn des satzes leider nich sorry

Zitat:
Nochmal im Klartext: Du hast den Aufruf von DateTimeToTimeStamp eliminiert, der in der Original-Unit die Basistransformation durchführt.
schon klar, dass ich den eliminiert habe, aber ich habe auch die ganze "datums"-verwaltung daran angepasst. also, jetz zeig ich noch mal meinen ganzen lösungsweg auf.

ich erhalte ein datum mittels get_sysdate. hier wird eine api-funktion aufgerufen, die das datum (+zeit) in form von tsystemtime ausgibt. dann wandle ich dieses ergebnis mit encodedate in eine gültige integer-zahl um. die sollte jetz imho timestamp.date (oder wie das heißt) entsprechen.
so, jetzt löse ich diese zahl mit hilfe (der gegenfunktion) von encodedate wieder in die einzelnen zahlen-werte auf. dabei sollte es doch eigentlich völlig egal sein, dass ich timestampto... weglasse, da ich ja eh nur mit dem datum arbeite und nicht auch noch mit der zeit.
--> da ich von vornherein nur mit integerwerten arbeite, brauche ich auch keine umformung mit timestampto... vornehmen!!!!

oder liege ich hier jetzt falsch -wenn ja tuts mir fett sorry


noch ein paar ergenzungen:

Delphi-Quellcode:
type TSystemTime = record
  wYear: Word;
  wMonth: Word;
  wDayOfWeek: Word;
  wDay: Word;
  wHour: Word;
  wMinute: Word;
  wSecond: Word;
  wMilliseconds: Word;
end;

//diese funktion berechnet aus dem übergebenen jahr, monat und dem tag das datum
function EncodeDate(Year, Month, Day: Word): Integer;
var
  I: Integer;
  DayTable: PDayTable;
begin
  try
  result := 0;
  DayTable := @MonthDays[IsLeapYear(Year)];
  if (Year >= 1) and (Year <= 9999) and (Month >= 1) and (Month <= 12) and
    (Day >= 1) and (Day <= DayTable^[Month]) then
  begin
    for I := 1 to Month - 1 do
      Inc(Day, DayTable^[I]);
    I := Year - 1;
    result := I * 365 + I div 4 - I div 100 + I div 400 + Day - 693594;
  end;
  except
    raise conv.Create('Fehler beim codieren von Datumswerten in einen ' +
        'Integer-Wert!');
  end;
end;

//funktion ermittelt das aktuelle systemdatum
function Get_SysDate: Integer;
var
  SystemTime: TSystemTime;
begin
  GetSystemTime(SystemTime);
  with SystemTime do
    Result := EncodeDate(wYear, wMonth, wDay);
end;
mfg,
heiopei
  Mit Zitat antworten Zitat