![]() |
Re: problem bei "selbstgerschriebenem" decodedate.
abend,
Zitat:
Zitat:
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:
mfg,
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; heiopei |
Re: problem bei "selbstgerschriebenem" decodedate.
Delphi-Quellcode:
Du berechnest in deiner Routine EncodeDate() zuerst die Gesamttage seit Beginn der Zeitrechnung - das ist zwar vom Ergebnis nicht ganz richtig, aber sei's drum. Zuletzt rechnest du durch Subtraktion von 693594 Tagen das Ergebnis in die Zahl der Tage seit dem 31.12.1899 um.
result := I * 365 + I div 4 - I div 100 + I div 400 + Day - 693594;
Warum? In deiner Routine DecodeDate() gehst du doch davon aus, das das übergebene Datum die Zahl der Tage seit dem 1.1.0001 ist! Habe ich mich jetzt verständlicher ausgedrückt? marabu |
Re: problem bei "selbstgerschriebenem" decodedate.
abend,
ach du sch... hab, mich schon gefragt, ob ich den wert wirklich mit kopieren muss. :wall: vielen vielen dank!!! Zitat:
aber was soll das heißen? :gruebel: Zitat:
heiopei :hello: :cheers: :hello: |
Re: problem bei "selbstgerschriebenem" decodedate.
Die Tage zwischen dem 4. und dem 15. Oktober 1582 hat es nie gegeben, sie fielen der Kalenderreform von Papst Gregor XIII zum Opfer. Insofern hast du eine kleine Unschärfe in deinen Routinen.
marabu |
Re: problem bei "selbstgerschriebenem" decodedate.
Zitat:
Delphi-Quellcode:
procedure MyPersonalDecodeDate(date: Integer; var Year, Month, Day: Word);
begin DecodeDate(date, Year, Month, Day); // einfach die Funktion mit einem Integer füttern... end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz