![]() |
AW: [D5] Dateidatum wird falsch gelesen
Weil für dieses Datumsformat nunmal eine Grenze definiert ist und diese liegt halt bei 1980.
Grund, siehe "Zeit der letzten Änderung" und "Datum der letzten Änderung" in ![]() Aus jenem Grund haben etwas aktuellere Delphis da auch zusätzlich weitere/neuere Datums-Felder in dem Record. In einen Integer passen nicht unbegrenzt Daten rein. Beispiel: ![]() Du kannst gern mit einem Fiat Punto deinen Umzug machen, aber da du nur einmal fahren darfst, muß alles gleichzeitig dort rein ... so viel, wie halt rein geht. Ach ja, egal was man umwandelt, multimpiziert oder sonstwie berechnet ... man kann aus einem ungültigen Wert niemals einen Gültigen mehr machen. mögliche Lösungen:
|
AW: [D5] Dateidatum wird falsch gelesen
Zitat:
Aber himitsu hat recht, die Inhalte des TWin32FindData sind ja auch im TSearchRec.FindData zu finden, es ist also nicht unbedingt notwendig, FindFirstFile/FindNextFile statt FindFirst/FindNext zu benutzen. MfG Dalai |
AW: [D5] Dateidatum wird falsch gelesen
Zitat:
|
AW: [D5] Dateidatum wird falsch gelesen
Zitat:
Du hast doch schon einen Integer, wenn Du die Daten mit FindFirst oder FindNext ausliest. In Deinem Code-Beispiel in Post #1 ist in "search.Time" das Datum als Integer-Wert und diesen speicherst Du einfach ab. |
AW: [D5] Dateidatum wird falsch gelesen
Zitat:
Wozu also Speicher für Daten bereithalten, die es vor 1970 nicht gab. Für das Jahr 1968 braucht man zusätzliche 7 Bits. Wofür. Also hat man getrickst und beschlossen, die Zeitrechnung auf Computern beginnt im Jahr 1970 (oder so ähnlich). Wenn also im Jahr 2015 eine Datei abgespeichert wird, wird nur das Jahr 45 gespeichert. Fragt man das System jetzt wann die Datei gespeichert wurde, nimmt es die 45 und addiert 1970 dazu. Ergebnis 2015. Ist ein Trick, man spart 7 Bits. Deshalb kann es auch keine Datum-Daten vor vor 1970 geben, denn das System kann nicht kleinere Werte als 0 ablegen. Somit kann jede Datei ohne Datum nur mit 1970 anfangen. Und nun kommst du mit deinem Delphi-Datum an. Auch Delphi muss tricksen, damit es ein Datum plus Uhrzeit in eine Double speichern kann. Ein Double kommt mit 8 Bytes aus. Das würde nicht für ein volles Datum reichen, aber Delphi ist großzügiger, es beginnt bei 1900. Also, es gibt keine Daten von vor 1970, also findet sich auf dem System auch kein Datum von vor 1970. Das solltest du akzeptieren. Zitat:
Zitat:
|
AW: [D5] Dateidatum wird falsch gelesen
ha!
jo, entschuldigt, wenn ich Euch auf die Nerven gegangen bin. naja, für mich war das logisch die ins normale DateTime konvertierte FileDateTime zu speichern, weil ich dachte, mit dem DateTime würde man öfter rechnen, da ich beim Implementieren im web/google und in delphi foren viel über das Gemaule/Unverständnis beim Weiterverarbeiten vom unkonvertierten Dateidatum gestolpert war, und das bei mir vermeiden wollte ;D nein, von daher hab ich die Integer nicht ingoriert. Ich hielt sie einfach nur nicht für ein "richtiges" Datum :D wegen FileTime<>Datum u. Zeit :D Mhh, ja und die Dateien kommen bei mir schon vor. Nicht von CDs oder gar überspielten 5¼" Disketten des "Brotkastens" (c64). Ich hab nämlich mit dem SpeedCommander per normalem FTP von einigen Servern heruntergeladen und das Dateidatum mit übernommen ... und da haben die Server wohl Mist gesendet: Denn teilweise wurde dabei das Lastchange auf 1.1.1970 gesetzt. Von daher is das für mich natürlich schon wichtig, da ich die alle katalogisieren wollte. Also noch einmal herzlichen Dank an ALLE! |
AW: [D5] Dateidatum wird falsch gelesen
Wie schon gesagt, man kann das Search.Time speichern und FileDateToDateTime nutzen wenn man es benötigt.
Wenn es aber unbedingt sein muss, obwohl, ob ich nun mit FileDateToDateTime beizeiten das Datum passend konvertiere oder es vorher durch 100000 tiele, ist eigentlich gehopst wie gesprungen. Aber wenn unbedingt sein muss, wenn du Datum und Uhrzeit trennst, also jede der Angaben separat speicherst, dann sollte das auch mit Integer gehen:
Delphi-Quellcode:
var
Datum, Uhrzeit: Integer; DateTime: TDateTime; begin Datum := Trunc(Now); Uhrzeit := Trunc((Now - Datum) * 100000); DateTime := Datum + (Uhrzeit / 100000); ShowMessage(DateTimeToStr(DateTime)); end; Zitat:
|
AW: [D5] Dateidatum wird falsch gelesen
Jain. 0 ist nicht konvertierbar. Geht erst ab 2162688 (1.1.80). (Siehe auch himitsu)
Delphi-Quellcode:
I := DateTimeToFileDate(StrToDateTime('1.1.1980'));
ShowMessage(DateTimeToStr(FileDateToDateTime(I - 1))); // -> Exception |
AW: [D5] Dateidatum wird falsch gelesen
Zitat:
2162688 entspricht dem 01.01.1980 um 00:00:01 Uhr. |
AW: [D5] Dateidatum wird falsch gelesen
Gerade habe ich eine Textdatei erstellt und nachträglich Erstelldatum sowie Änderungdatum geändert. Seltsamerweise zeigt der
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:10 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