![]() |
Delphi-Version: XE4
FileAge Sommer/Winterzeit Uhrzeit falsch
Wenn man per fileage die Uhrzeit von einer Datei aufruft, welche zur Sommerzeit angelegt wurde, dann wird in der Winterzeit die falsche Uhrzeit ausgegeben.
D.h eine Datei von 8:00 wird mit fileage 7:00 angezeigt. Zuerst dachte ich es würde an dem filage liegen welches deprecated ist, aber mit dem neuen passiert dies auch.
Code:
Im Explorer wird alles korrekt angezeigt.
FileAge(filename,filedatetime,false);
Idee woran das liegt oder wie man das umgeht? Ich habe im Netz etwas von Daylight Saving Time gefunden. D.h man müsste ich selber darum kümmern? |
AW: FileAge Sommer/Winterzeit Uhrzeit falsch
Nimm besser
Delphi-Quellcode:
aus System.IoUtils.pas.
TFile.GetLastWriteTime
|
AW: FileAge Sommer/Winterzeit Uhrzeit falsch
Danke für den Tipp. Gibt allerdings genauso falsch die Zeit wieder.
Oder ist der Fehler eher in formatdatetime oder datetimetostr beim darstellen der Uhrzeit? |
AW: FileAge Sommer/Winterzeit Uhrzeit falsch
Zitat:
Mit
Delphi-Quellcode:
bekomme ich 24.06.2019 15:55 und
DateTimeToStr(FileDateToDateTime(FileAge(cFileName)))
mit
Delphi-Quellcode:
liefert er 24.06.2019 16:55
DateTimeToStr(TFile.GetLastWriteTime(cFileName))
|
AW: FileAge Sommer/Winterzeit Uhrzeit falsch
Ich bin der Meinung, dass das schon immer problematisch war. Das NT-Filesystem speichert intern UTC. Die lokale Zeit muss dann berechnet werden.
Um also zur korrekten lokalen Zeit zu kommen, muss zunächst der Offset zwischen UTC und lokaler Zeit zum Zeitpunkt des Zeitstempels berechnet werden (und an dieser Stelle darf man gerne eine Tabelle für alle Änderungen der Sommerzeitregelung der letzten xxx Jahre anlegen - natürlich unter Berücksichtigung des jeweiligen Landes). Als weitere Schwierigkeit kommt hinzu, dass bei anderen Dateisystemen (z.B. FAT32 bei USB Sticks etwa) die lokale Zeit (also nicht UTC) gespeichert wird. Deshalb kann die lokale Zeit dort unproblematisch ermittelt werden. Dafür kommt man aber nicht mehr sauber zu UTC zurück (wegen der doppelten Stunde bei der Zeitumstellung). Die Ursache des Problems ist bei den verwendeten Funktionen zu suchen die den Zeitstempel ermitteln und aus dem Zeitstempel dann die jeweils andere Zeit berechnen. Die Umwandlung der Zeit in einen String ist nicht das Problem. |
AW: FileAge Sommer/Winterzeit Uhrzeit falsch
Zitat:
Meine Delphi-IDE (10.1) stolpert übrigens auch über dieses Problem. Wenn während der Zeitumstellung die IDE geöffnet bleibt, dann glaubt sie danach, dass sich alle offenen Dateien geändert hätten. |
AW: FileAge Sommer/Winterzeit Uhrzeit falsch
Da weiß man seit Jahren, daß Oberfläche und Daten getrennt gehören, aber konsequente Umsetzung warum das denn. Wenn ich in die Delphi-Referenz schaue und alle Funktionen durch habe, die sich mit der "Filetime" beschäftigen, dann weiß ich auch erst was die einzelnen Funktionen können, bzw. nicht können. Und jetzt kommt mir nichtmit historischen Altlasten. Das zumindest sollte dann auch explizit drin stehen.
Gruß k-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 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