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 1 von 2  1 2      
heiopei
(Gast)

n/a Beiträge
 
#1

problem bei "selbstgerschriebenem" decodedate...

  Alt 11. Mai 2005, 08:55
hallo,
da ich in letzter zeit nicht wirklich viel zu tun hatte, hab ich einfach mal zur "optimierung" eine eigene datumsfunktionen-unit geschrieben, wobei ich den größten teil aus der sysutils übernommen habe und neuzusammengesetzt habe
naja, so weit so gut - jetzt hab ich nur das problem, das meine decodedate funktion völlig falsche werte zurückgibt! ich hab schin alles mögl. auspobiert und mit der sysutils verglichen, aber es geht einfach nicht .
deswegen möchte ich euch mal fragen, ob ihr den fehler findet - siehe anhang!!!
(ich bräuchte das ganze dann doch sehr bald, da ich es in ein neues projekt einbinden möchte!)

mfg,
heiopei
Angehängte Dateien
Dateityp: pas datehandling_200.pas (8,0 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat
heiopei
(Gast)

n/a Beiträge
 
#2

Re: problem bei "selbstgerschriebenem" decodedate.

  Alt 11. Mai 2005, 08:57
warum schaut der titel bei mir so komisch aus (im portal)!!!

heiopei
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#3

Re: problem bei "selbstgerschriebenem" decodedate.

  Alt 11. Mai 2005, 09:02
Zitat von heiopei:
warum schaut der titel bei mir so komisch aus (im portal)!!!

heiopei
Das Wort ist zu lang und wird halt mitten im HTML Befehl getrennt *g*

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
heiopei
(Gast)

n/a Beiträge
 
#4

Re: problem bei "selbstgerschriebenem" decodedate.

  Alt 11. Mai 2005, 18:16
abend

PUSHi (da ja nur einer die unit runtergeladen hat )

würd mich echt rießig freuen, wenn jemand den fehler finden könnte, da ich die unit jetzt doch früher als gedacht BENÖTIGE. nochmal zum problem: die funktion decodedate liefert einfach total falsche werte zurück.rufe ich z.b. decodedate(get_sysdate, ...) auf, so bekomme ich für 10.5.2005 ungefähr so was raus - 12.5.106. die funktion get_sysdate hab ich schon überprüft, die liefert richtige ergebnisse - also kanns nur an decodedate liegen!!!

mfg,
heiopei
  Mit Zitat antworten Zitat
heiopei
(Gast)

n/a Beiträge
 
#5

Re: problem bei "selbstgerschriebenem" decodedate.

  Alt 12. Mai 2005, 11:29
morgejn
ich wags einfach nochmal

PUSH (still 1 download )

wäre echt wichtig, das ich den fehler finde, da ich die unit bis freitag in ein programm fertig eingebunden haben muss. ihr wisst ja - seine eigenen fehler sieht man nie

also wär echt super. wenn ihr den fehler finden würdet. weil ich sonst einen großen teil meines programm neu machen muss !!!!

mfg,
heiopei
  Mit Zitat antworten Zitat
heiopei
(Gast)

n/a Beiträge
 
#6

Re: problem bei "selbstgerschriebenem" decodedate.

  Alt 13. Mai 2005, 11:44
mitdach,
so jetzt versuch ich einfach nochmal:

also ich hab aus der unit sysutils die folgende funktion rauskopiert und etwas verändert; dabei ermittelt sie aus dem datum "date" vom typ integer den tag, monat und das jahr:

Delphi-Quellcode:
//ein paar definitionen...
type
  PDayTable = ^TDayTable;
  TDayTable = array[1..12] of Word;

const
  MonthDays: array [Boolean] of TDayTable =
    ((31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
     (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31));

//diese funktion überprüft, ob das jahr "year" ein schaltjahr ist
function IsLeapYear(Year: Word): Boolean;
begin
  Result := (Year mod 4 = 0) and ((Year mod 100 <> 0) or (Year mod 400 = 0));
end;

//diese prozedur berechnet aus dem datum "date" das jahr, den monat und den tag
procedure DecodeDate(date: Integer; var Year, Month, Day: Word);
const
  D1 = 365;
  D4 = D1 * 4 + 1;
  D100 = D4 * 25 - 1;
  D400 = D100 * 4 + 1;
var
  Y, M, D, I: Word;
  DayTable: PDayTable;
begin
  try
  if date <= 0 then
  begin
    Year := 0;
    Month := 0;
    Day := 0;
  end
  else
  begin
    Dec(date);
    Y := 1;
    while date >= D400 do
    begin
      Dec(date, D400);
      Inc(Y, 400);
    end;
    DivMod(date, D100, I, D);
    if I = 4 then
    begin
      Dec(I);
      Inc(D, D100);
    end;
    Inc(Y, I * 100);
    DivMod(D, D4, I, D);
    Inc(Y, I * 4);
    DivMod(D, D1, I, D);
    if I = 4 then
    begin
      Dec(I);
      Inc(D, D1);
    end;
    Inc(Y, I);
    DayTable := @MonthDays[IsLeapYear(Y)];
    M := 1;
    while True do
    begin
      I := DayTable^[M];
      if D < I then
        Break;
      Dec(D, I);
      Inc(M);
    end;
    Year := Y;
    Month := M;
    Day := D + 1;
  end;
  except
    raise conv.Create('Fehler beim decodieren eines Datumswertes!' + #10 +
        'Wenden Sie sich bitte an den Hersteller...');
  end;
  showmessage(inttostr(date));
end;
um das datum dann als string anzuzeigen verwende ich momentan folgende funktion:

Delphi-Quellcode:
function DateToStr(date: Integer): string;
var
  a, b, c: Word;
begin
  DecodeDate(date, a, b, c);
  result := IntToStr(c) + '.' + IntToStr(b) + '.' + IntToStr(a);
// result := IntToStr(ExtractDay(date)) + '.' + IntToStr(ExtractMonth(date)) +
// '.' + IntToStr(ExtractYear(date));
end;
soweit so gut, nur gibt die funktion föllig falsche werte aus! hab schon alles verglichen und ausprobiert, aber jetzt weiss ich nicht mehr weiter.

warum bekomme ich mit decodedate also so falsche werte?!?

mfg,
heiopei
  Mit Zitat antworten Zitat
marabu

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

Re: problem bei "selbstgerschriebenem" decodedate.

  Alt 13. Mai 2005, 12:46
Zitat von Borland:
Der ganzzahlige Anteil eines TDateTime-Wertes gibt an, wie viele Tage seit dem 30. Dezember 1899 vergangen sind.
Diese Festlegung wird in deinem Code nirgendwo berücksichtigt.

Grüße vom marabu
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: problem bei "selbstgerschriebenem" decodedate.

  Alt 13. Mai 2005, 12:58
Zitat von heiopei:
da ich in letzter zeit nicht wirklich viel zu tun hatte, hab ich einfach mal zur "optimierung" eine eigene datumsfunktionen-unit geschrieben, wobei ich den größten teil aus der sysutils übernommen habe und neuzusammengesetzt habe
Goldene Programmierer Regel:
Niemals an VCL Units rumpfuschen oder Ersatz-Units herstellen nur um ein paar Bytes zu optimieren !!!

Der Datumstyp von Delphi ist TDateTime (=Double) nicht Integer
Delphi-Quellcode:
//diese prozedur berechnet aus dem datum "date" das jahr, den monat und den tag
procedure DecodeDate(date: Integer; var Year, Month, Day: Word);
// *******
Andreas
  Mit Zitat antworten Zitat
heiopei
(Gast)

n/a Beiträge
 
#9

Re: problem bei "selbstgerschriebenem" decodedate.

  Alt 13. Mai 2005, 14:51
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...
in sysutils wird das datum "date" vo typ TDateTime auch erst mit ttimestamp in ein integer wert umgewandelt, womit ich diese prozedur der umwandlung ja auslassen kann und gleich die eigentliche prozedur ablaufen lassen kann.

wer genau wissen will, sollte sich meine unit anschauen, da man dann mein vorgehen besser / detailierter nachvollziehen kann!!!

Zitat:
Niemals an VCL Units rumpfuschen oder Ersatz-Units herstellen nur um ein paar Bytes zu optimieren !!!
tja, das ist erstens jetzt nicht zu spät, sondern bringt nicht nur ein paar bytes optimierung, sondern die ganze codeverwaltung im meinem programm wird dadurch um ein vielfaches einfacher (hab mir bei der änderung schon auch n bisschen was gedacht )!!!

mfg,
heiopei
  Mit Zitat antworten Zitat
marabu

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

Re: problem bei "selbstgerschriebenem" decodedate.

  Alt 13. Mai 2005, 15:56
@heiopei: Hast du denn verstanden, dass ich deine Frage nach der Fehlerursache beantwortet hatte?

Nochmal im Klartext: Du hast den Aufruf von DateTimeToTimeStamp eliminiert, der in der Original-Unit die Basistransformation durchführt.

marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:49 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