AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi problem bei "selbstgerschriebenem" decodedate...
Thema durchsuchen
Ansicht
Themen-Optionen

problem bei "selbstgerschriebenem" decodedate...

Ein Thema von heiopei · begonnen am 11. Mai 2005 · letzter Beitrag vom 14. Mai 2005
Antwort Antwort
Seite 2 von 2     12   
heiopei
(Gast)

n/a Beiträge
 
#11

Re: problem bei "selbstgerschriebenem" decodedate.

  Alt 13. Mai 2005, 21: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
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#12

Re: problem bei "selbstgerschriebenem" decodedate.

  Alt 13. Mai 2005, 22:20
result := I * 365 + I div 4 - I div 100 + I div 400 + Day - 693594; 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.

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
  Mit Zitat antworten Zitat
heiopei
(Gast)

n/a Beiträge
 
#13

Re: problem bei "selbstgerschriebenem" decodedate.

  Alt 13. Mai 2005, 22:27
abend,

ach du sch... hab, mich schon gefragt, ob ich den wert wirklich mit kopieren muss.

vielen vielen dank!!!

Zitat:
Habe ich mich jetzt verständlicher ausgedrückt?
kann den fehler jetzt natürlich sehr gut nachvollziehen,

aber was soll das heißen?

Zitat:
...das ist zwar vom Ergebnis nicht ganz richtig, aber sei's drum
thx,
heiopei


  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#14

Re: problem bei "selbstgerschriebenem" decodedate.

  Alt 13. Mai 2005, 22:38
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
  Mit Zitat antworten Zitat
axelf98

Registriert seit: 27. Aug 2003
Ort: Ennepetal
440 Beiträge
 
Delphi 2005 Personal
 
#15

Re: problem bei "selbstgerschriebenem" decodedate.

  Alt 14. Mai 2005, 01:39
Zitat von heiopei:
hallo,
Zitat:
Der Datumstyp von Delphi ist TDateTime (=Double) nicht Integer
schon klar, aber ich sagte ja, dass ich die prozedur umgeändert habe.
ich möchte eben nur mit dem datum und nicht mit der zeit arbeiten, weshalb ich einfach nur einen integer typ für das datum benötige...
Dann schreib eine Prozedur wie
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 00:24 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