AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

FileAge Sommer/Winterzeit Uhrzeit falsch

Ein Thema von stalkingwolf · begonnen am 7. Nov 2019 · letzter Beitrag vom 8. Nov 2019
Antwort Antwort
stalkingwolf

Registriert seit: 6. Mai 2011
284 Beiträge
 
#1

FileAge Sommer/Winterzeit Uhrzeit falsch

  Alt 7. Nov 2019, 14:53
Delphi-Version: XE4
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:
FileAge(filename,filedatetime,false);
Im Explorer wird alles korrekt angezeigt.

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?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
7.077 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: FileAge Sommer/Winterzeit Uhrzeit falsch

  Alt 7. Nov 2019, 15:10
Nimm besser TFile.GetLastWriteTime aus System.IoUtils.pas.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
284 Beiträge
 
#3

AW: FileAge Sommer/Winterzeit Uhrzeit falsch

  Alt 7. Nov 2019, 15:50
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?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
7.077 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: FileAge Sommer/Winterzeit Uhrzeit falsch

  Alt 7. Nov 2019, 16:32
Gibt allerdings genauso falsch die Zeit wieder.
Also hier bekomme ich für eine Datei im Explorer 24.06.2019 16:55 angezeigt.

Mit DateTimeToStr(FileDateToDateTime(FileAge(cFileName))) bekomme ich 24.06.2019 15:55 und
mit DateTimeToStr(TFile.GetLastWriteTime(cFileName)) liefert er 24.06.2019 16:55
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
382 Beiträge
 
#5

AW: FileAge Sommer/Winterzeit Uhrzeit falsch

  Alt 8. Nov 2019, 07:14
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.

Geändert von samso ( 8. Nov 2019 um 16:13 Uhr)
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
382 Beiträge
 
#6

AW: FileAge Sommer/Winterzeit Uhrzeit falsch

  Alt 8. Nov 2019, 08:18
Im Explorer wird alles korrekt angezeigt.
Bei Windows XP konnte der Explorer das auch noch nicht. Damals wäre Dir der Fehler eventuell also nicht aufgefallen.

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.

Geändert von samso ( 8. Nov 2019 um 08:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.449 Beiträge
 
Delphi 7 Personal
 
#7

AW: FileAge Sommer/Winterzeit Uhrzeit falsch

  Alt 8. Nov 2019, 10:39
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf