AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie kann man ein DOS Datum in Tdate umwandeln ???
Thema durchsuchen
Ansicht
Themen-Optionen

Wie kann man ein DOS Datum in Tdate umwandeln ???

Ein Thema von bodycounter · begonnen am 28. Jan 2010 · letzter Beitrag vom 29. Jan 2010
Antwort Antwort
bodycounter

Registriert seit: 13. Jul 2004
12 Beiträge
 
#1

Wie kann man ein DOS Datum in Tdate umwandeln ???

  Alt 28. Jan 2010, 19:18
Hallo.

Ich habe eine uralte DOS Anwendung, die Ihre Daten(bank) als Binär Datei speichert.
Diese Datei will ich mit Delphi einlesen um es dann weiter zu verarbeiten.

String und Integer Werte sind kein Problem, doch wie sieht es mit dem Datum aus?

Unter Delphi ist es ja ein Tdate als Double mit 8 Byte (64bit).
Wie ist/war das unter DOS/TurboPascal?

Ich weiß, das
6BB001hex der 1. Feb. 2003,
6CB001hex der 2. Feb. 2003 und
8D2C02hex der 2. Feb. 1995 (vlt. auch 2095, man kann nur 2 Zahlen eingeben) ist.


Wie zu sehen erhöht ein Tag den HexWert auch um Eins. Es scheinen auch die Bytes vertauscht zu sein.
Wie kann ich diesen 32Bit Wert in ein TDate umwandeln?

Hier noch mal das Datum mit ein paar mehr Byte davor und dahinter.

31 31 6F 00 6B B0 01 00 C8 55 = 1.Feb.2003
31 31 6F 00 6C B0 01 00 C8 55 = 2.Feb.2003
31 31 6F 00 8D 2C 02 00 C8 55 = 2.Feb.1995

Danke, für das lesen
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#2

Re: Wie kann man ein DOS Datum in Tdate umwandeln ???

  Alt 28. Jan 2010, 19:24
Läßt sich der hex Wert nicht in Integer wandeln ? Und würde der entstehende Integer Wert dem Datum entsprechen ?

  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Wie kann man ein DOS Datum in Tdate umwandeln ???

  Alt 28. Jan 2010, 19:25
Mit TP holst Du das Datum mit
Getdate((yyyy,mm,dd,wd) aus der Unit DOS.
Alle Variablen müssen vom Typ WORD sein

Gruß

Wolfgang
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
bodycounter

Registriert seit: 13. Jul 2004
12 Beiträge
 
#4

Re: Wie kann man ein DOS Datum in Tdate umwandeln ???

  Alt 28. Jan 2010, 19:43
Zitat von Wolfgang Mix:
Mit TP holst Du das Datum mit
Getdate(h,m,s,htl) aus der Unit DOS.
Alle Variablen müssen vom Typ WORD sein
Ich code in Delphi und nicht in TP. Heiß das, das es keine Extra Datumsvariable unter TP gibt? Und wie sieht es mit DOS aus? gab es da was? Wenn man das Datum über GetDate holt und es dann abspeichern wollen würde, bräuchte man ja 3 x ein Word also 6 Byte. Ich Probiere das mal aus.

Zitat von haentschman:
Läßt sich der hex Wert nicht in Integer wandeln ? Und würde der entstehende Integer Wert dem Datum entsprechen ?
Ja klar kann man.
6BB0 ist z.B. 27568 oder
B06B mit Byte Swap ist 45163.
Der 1.Feb.2003 ist aber als Integer 37653. Also komm ich da nicht weiter, oder mach ich was falsch?
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Wie kann man ein DOS Datum in Tdate umwandeln ???

  Alt 28. Jan 2010, 19:48
@bodycounter
Zitat:
Heiß das, das es keine Extra Datumsvariable unter TP gibt?
Ja, aber vielleicht gibt es die Unit DOS im Quelltext,
oder suche mal mit "FreePascal"
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: Wie kann man ein DOS Datum in Tdate umwandeln ???

  Alt 28. Jan 2010, 20:03
aus Unit Windows das MSDN-Library durchsuchenFileTimeToDosDateTime und dann gibt es noch irgendwo sowas wie FileTime-zu-DateTime

[add]
FileTime-zu-DateTime macht Delphi-Referenz durchsuchenFileAge über

Delphi-Quellcode:
FileTimeToSystemTime(LocalFileTime, LSystemTime);
with LSystemTime do
  FileDateTime := EncodeDate(wYear, wMonth, wDay) +
    EncodeTime(wHour, wMinute, wSecond, wMilliSeconds);

Aber alles egal, da es in SysUtils ein Delphi-Referenz durchsuchenFileDateToDateTime gibt.
$2B or not $2B
  Mit Zitat antworten Zitat
bodycounter

Registriert seit: 13. Jul 2004
12 Beiträge
 
#7

Re: Wie kann man ein DOS Datum in Tdate umwandeln ???

  Alt 29. Jan 2010, 13:33
Hab nun herrausgefunden wie die Daten aufgebaut sind.

49 BA 01 00 C4 95 00 00 ist der 1.1.1910 um 10:39Uhr

Zu erst kommen 4 byte in Litte Endian als Integer und stellen ganze Tage nach dem 1.1.1600 dar.
Danach kommen 4 byte in Litte Endian als Integer und stellt ganze Sekunden nach 00:00 dar.

48ba0100 byte swap = 0001ba48 = 113224 Tage nach 1.1.1600 = 1.1.1910
c4950000 byte swap = 000095c4 = 38340 Sekunden = 639 Minuten = 10:39Uhr

Nun meine frage. Ist das irgendein bekannter Standard oder hat sich der Programmiere sich selber was ausgedacht?

Danke
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#8

Re: Wie kann man ein DOS Datum in Tdate umwandeln ???

  Alt 29. Jan 2010, 13:36
Hi!

Wärst du auch so nett, uns es dann mitzuteilen?


Grüße, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

Re: Wie kann man ein DOS Datum in Tdate umwandeln ???

  Alt 29. Jan 2010, 13:40
Zitat von fkerber:
Wärst du auch so nett, uns es dann mitzuteilen?
Schau dir einfach den Quellcode von FileDateToDateTime an,
falls es zufällig die selbe Kodierung ist.
$2B or not $2B
  Mit Zitat antworten Zitat
bodycounter

Registriert seit: 13. Jul 2004
12 Beiträge
 
#10

Re: Wie kann man ein DOS Datum in Tdate umwandeln ???

  Alt 29. Jan 2010, 14:02
Hier meine schnelle eigene Lösung:

Delphi-Quellcode:
function bytes2datetime(const date,time:integer):Tdatetime;
begin
    result := -109571 + date + (time/86400); // -109571 = 1.1.1600 | 86400 = Sekunden pro Tages
end;
Danke für die Tipps
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:04 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