AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi [D5] Dateidatum wird falsch gelesen
Thema durchsuchen
Ansicht
Themen-Optionen

[D5] Dateidatum wird falsch gelesen

Ein Thema von JanWe · begonnen am 16. Apr 2015 · letzter Beitrag vom 18. Apr 2015
 
Popov
(Gast)

n/a Beiträge
 
#7

AW: [D5] Dateidatum wird falsch gelesen

  Alt 17. Apr 2015, 12:03
ja, kann sein, daß die das bei den höheren Versionen schon geändert / präzisiert haben.

hier hab ich noch [nach FileDateToDateTime();]
41612,8855092593
für
04.12.2013 21:15:08
Präzisiert wird gar nichts. Wo kommen wir dahin, wenn in einer Delphi-Verison eine Funktion ein Ergebnis liefert, in einer höheren Version etwas anderes. Wenn, dann kommt einen andere Funktion dazu, aber jede Funktion sollte immer das gleiche Ergebnis liefern. Egal welche Version.

Was aber Bjoerk meinte war nicht das Ergebnis der FileDateToDateTime Funktion, sondern von Search.Time. Das ist Integer. Dieser Integerwert wird mit der FileDateToDateTime in das Delphi Format konvertiert. Und das ist ein Double Wert. Die Vorkommastellen präsentieren das Datum, die Nachkommastellen die Zeit. Die Formel ist einfach: 1 / 24 / 60 / 60 / 1000. 1 ist der Tag. Du kannst dir also aussuchen was die 1 bedeutet, entweder 1 Tag oder 24 Stunden. Ist das Gleiche. Also 1 Tag / 24 Stunden/ 60 Minuten / 60 Sekunden / 1000 Millisekunden. Wobei bei dem Millisekunden Delphi schon ungenau ist. Was die Stunden, Minuten und Sekunden angeht, da stimmt alles.

//Edit:

Der maximale positive Wert von Integer ist 2147483647. Bei Longword ist es 4294967295. Aber bleiben wir bei Integer.

MaxInt ist bei Integer also 2147483647, bzw. 2'147'483'647. Das sind 10 Zeichen. Now, bzw. Date, also der heutige Tag hat den Wert 42111, bzw. 42'111. Multiplizieren wir also den heutigen Tag mit 100000, bzw. 100'000, ist das Ergebnis 4211100000, bzw. 4'211'100'000. Der Wert ist also höher als der von Integer. Bei Logword hättest du da noch etwas Platz, aber nur für 838 Tage. Du solltest dich also mit deinem Programm beeilen, vorausgesetzt du nutzt Longword. Warum ist dein Wert aber negativ? Weil Integer den Bereich -2147483648..2147483647 hat. Das letzte Bit ist für das Vorzeichen. Wird es überschrieben, wird der Integer negativ. Die Idee mit der Multiplikation ist nicht optimal.

Ich könnte dir nun vorschlagen es auf eine andere Art zu speichern, das wird aber auch knapp. Der Grund könnte daran liegen, dass das Delphi Datum am 01.01.1900 anfängt, das Datum von Dateien (soweit ich es weiß) am 01.01.1970. Das sind 25567,5 Tage unterschied. Das spart paar Bit.

Aber nur falls du es dennoch so machen willst, Delphi kennt inzwischen Int64. Das könnte mit deinem Wert umgehen.
Delphi-Quellcode:
var
  i64: Int64;
  DateTime: TDateTime;
begin
  i64 := Trunc(Now * 100000);
  ShowMessage('Int64 = ' + IntToStr(i64));
  DateTime := i64 / 100000;
  ShowMessage('Daum und Zeit nach der Umrechnung = ' + DateTimeToStr(DateTime));
end;
Nur weiß ich nicht ob D5 schon Int64 hat.

Geändert von Popov (17. Apr 2015 um 12:29 Uhr)
  Mit Zitat antworten Zitat
 


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