Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: compinaut am März 30, 2023, 12:01:19

Titel: Gespeicherte Zeitstempel mit Dateizeitstempel während der Sommerzeit vergleichen
Beitrag von: compinaut am März 30, 2023, 12:01:19
Hallo,
ich habe ein Problem mit der Sommerzeit.
Ich speichere in Access, welche Dokumente in einem Ordner auf der Festplatte liegen. Auch der Zeitstempel der Dateien wird gespeichert. Viele Dateien werden im Laufe der Zeit auf der Festplatte gelöscht und andere bleiben länger vorhanden, sind aber schon einmal eingelesen worden in Access. Nun besteht wegen der Sommerzeit jedoch 1 Stunde Differenz zwischen dem Zeitstempel der Datei auf der Festplatte und der Speicherung in Access. Somit würde die Datei zum 2. Mal gespeichert. Über DateAdd + 1 Stunde bei der in Access vorhandenen Datei erhalte ich dennoch nicht den gleichen Wert wie im Zeitstempel der auf der Festplatte vorhandenen Datei. Bei Ausgabe beider Werte über MsgBox sind beide Angaben genau gleich.
Enthält der Zeitstempel der Datei vielleicht mehr Informationen als der in Access gespeicherte Datumswert?
Gruß
compinaut
Titel: Re: Gespeicherte Zeitstempel mit Dateizeitstempel während der Sommerzeit vergleichen
Beitrag von: MzKlMu am März 30, 2023, 12:09:04
Hallo,
Zeiten sind intern Double und somit Fließkomma. Und Fließkomma ist halt u.U. nicht ganz exakt.
Du solltest zum Vergleich die Zeit formatieren (mit Format) und erst dann vergleichen.
Zeige mal Beispiele für die Zeitdifferenzen.
Titel: Re: Gespeicherte Zeitstempel mit Dateizeitstempel während der Sommerzeit vergleichen
Beitrag von: ebs17 am März 30, 2023, 13:22:09
Auf Zeitzonen und Sommerzeit kannst Du hiermit reagieren:
Time Zone Information in Access and VBA (https://codekabinett.com/rdumps.php?Lang=2&targetDoc=time-zone-vba)

ZitatDu solltest zum Vergleich die Zeit formatieren (mit Format)
Format(Zeitstempel, "yyyy-mm-dd hh:nn:ss")
... oder z.B. Umrechnen in einen UNIX-Timestamp (vergangene Sekunden seit dem 01.01.1970)
DateDiff("s", #1/1/1970#, Zeitstempel)
Format erzeugt einen String, DateDiff erzeugt eine Ganzzahl.
Mit einer Ganzzahl lässt sich schneller vergleichen (geringere ByteBreite) und unmittelbar mathematisch rechnen.
Titel: Re: Gespeicherte Zeitstempel mit Dateizeitstempel während der Sommerzeit vergleichen
Beitrag von: PhilS am März 30, 2023, 13:50:31
Zitat von: compinaut am März 30, 2023, 12:01:19Enthält der Zeitstempel der Datei vielleicht mehr Informationen als der in Access gespeicherte Datumswert?
Das spielen viele Faktoren mit rein.
Ein wesentlicher ist das Dateisystem. Verschiedene Dateisysteme speichern die Dateizeiten sehr unterschiedlich.
Beispiele: FAT speichert die lokale Zeit (inkl. Sommer-/Winterzeit) und hat je nach Zeit (Erstellung, Änderung, Zugriff) eine Auflösung > 1s. NTFS dagegen speichert UTC mit einer Auflösung von 100 Nanosekunden.
FAT dürfte kaum noch eine Rolle spiele, aber viele NAS-Systeme verwenden Unix-Dateisysteme, die sich sicherlich im Detail auch anders verhalten.

Wie viel du von diesem Unterschieden mitbekommst, hängt davon ab, wie du die Zeitstempel der Dateien ausliest.

Wenn die Ausgabe der Zeiten visuell gleich aussieht, dürfte @MzKlMu's Tipp die Zeiten für den Vergleich als String zu formatieren die Lösung sein.

Zitat von: MzKlMu am März 30, 2023, 12:09:04Zeiten sind intern Double und somit Fließkomma.
Streng genommen stimmt das für Dateizeiten nicht. NTFS z.B. speichert Zeiten als 64bit Integer, der für die Verwendung in Access/VBA in Double umgewandelt werden muss, was noch mehr Ungenaugkeiten erzeugen kann, als Fließkommazahlen eh schon haben.
Titel: Re: Gespeicherte Zeitstempel mit Dateizeitstempel während der Sommerzeit vergleichen
Beitrag von: compinaut am März 30, 2023, 14:03:17
Vielen herzlichen Dank an alle!
Nun klappt es nach der Formatierung/Umwandlung mit Format(...).
Hab ja nun auch viel über die Datums-/Zeit-Speicherung bei verschiedenen Speicherformaten gelernt.
Gruß
compinaut