DateUtils: Sommerzeit-Umschaltung funktioniert nicht. Warum?

Rund um die LCL und andere Komponenten

DateUtils: Sommerzeit-Umschaltung funktioniert nicht. Warum?

Beitragvon Timm Thaler » 29. Mär 2017, 21:54 DateUtils: Sommerzeit-Umschaltung funktioniert nicht. Warum?

Ich habs schonmal im englischen Forum versucht, aber das Ergebnis war nicht so zufriedenstellend: http://forum.lazarus.freepascal.org/ind ... #msg241984

Ich habe einige Lazarus-Programme auf dem Raspberry unter Jessie laufen. Die schreiben Ereignisse mit Zeitstempel in Logfiles.

Vor einigen Tagen war nun Zeitumstellung. Die Zeit der Raspi-Uhr wurde richtig umgestellt, wie ich mit "date" in der Konsole auch überprüfen konnte. Die Programme haben aber immer noch die "alte" Zeit geloggt, mit einer Stunde Unterschied.

Erst nach Anhalten und Neustart haben die Programme dann die richtige Zeit geloggt. Das sah dann so aus:

26.03.17 18:41:50 - Beende HC Data
26.03.17 19:41:53 - Starte HC Data <= Neustart nach 3 Sekunden


Ich frage die Zeit mit "Now" ab und formatiere sie mit FormatDateTime.

Code: Alles auswählen
FormatDateTime('dd.mm.yy hh:nn:ss', Now)


Wenn ich die Beiträge richtig verstanden habe, liegt es daran, dass die Zeitzonen-Einstellung nur bei Programmstart abgefragt wird, und "Now" dann immer diese Einstellung verwendet. Man müsste regelmäßig "GetLocalTimezone" aufrufen, um eine Aktualisierung zu erzwingen (http://forum.lazarus.freepascal.org/ind ... 970.0.html).

Warum ist das so umständlich? Warum wird nicht einfach die Systemzeit abgefragt, wie sie auch "date" in der Konsole liefert?

Ist die Lösung mit "GetLocalTimezone" korrekt, oder gibt es noch eine bessere Lösung, bei dauernd laufenden Programmen richtig auf die Zeitumstellung zu reagieren?

Sollte sowas nicht in der Hilfe erwähnt werden? Das merkt man doch bestenfalls durch Zufall, und dann hat man vielleicht monatelang falsche Daten geloggt.

Im englischen Forum scheint das Thema nicht so interessant zu sein. Ist halt so, nimmt man hin.
Timm Thaler
 
Beiträge: 725
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon mse » 30. Mär 2017, 06:24 Re: DateUtils: Sommerzeit-Umschaltung funktioniert nicht. Wa

nowlocal() von MSEgui benutzt sys_getlocaltime() welches die Umstellung automatisch in sys_localtimeoffset() vornimmt . Der Code ist hier:
https://gitlab.com/mseide-msegui/mseide ... ysintf.pas
mse
 
Beiträge: 2013
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon Timm Thaler » 22. Jun 2017, 18:17 Re: DateUtils: Sommerzeit-Umschaltung funktioniert nicht. Wa

Ich muss das nochmal rauskramen:

Ich habe jetzt versucht, entsprechend diversen Tipps aus dem englischen Forum mit

Code: Alles auswählen
      ReadTimezoneFile(GetTimezoneFile);
      GetLocalTimezone(0);    // Zeitzone neu einlesen für Sommer/Winterzeit-Umschaltung

eine regelmäßige Aktualisierung der Zeitzone / Sommerzeit zu erzwingen. Mit dem Effekt, dass er jetzt immer Winterzeit liefert. ;-)

Wahrscheinlich ist der Timer bei https://www.freepascal.org/docs-html/rtl/unix/getlocaltimezone.html falsch, aber welchen Timer muss man denn da einsetzen? fptime wie im Beispiel funktioniert schonmal nicht. Einen eigenen Timer habe ich nicht. Es müsste ja ein von Now verwendeter Timer sein, aber wo bekomme ich den her. Ich steh da gerade auf dem Schlauch...

Hab jetzt noch ReReadLocalTime https://www.freepascal.org/docs-html/rtl/unix/rereadlocaltime.html gefunden, wäre das hier angebrachter? Witzigerweise erst jetzt, obwohl ich zu dem Thema schon mehrere Googlesessions hatte.
Timm Thaler
 
Beiträge: 725
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded | 
CPU-Target: Raspberry Pi 3
Nach oben

• Themenende •

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste

cron
porpoises-institution
accuracy-worried