Forum: PC-Programmierung fpc/Lazarus: UTC-Umrechnungen liegen daneben


von Gartenbahner (Gast)


Lesenswert?

Hi zusammen,
ich habe ein Problem mit Uhrzeiten unter Lazarus/FPC: Die Umrechnung der 
Uhrzeit hakelt reproduzierbar abhängig von der Plattform.

3 Systeme im Einsatz:
a) PC mit Linux Mint 18
b) raspberry2 mit raspbian
c) raspberry3 mit osmc
Alle Systeme sind in der gleichen Zeitzone, alle haben die gleiche 
lokale Zeit.

Eigentlich will ich die aktuelle Uhrzeit als UTC an ein externes Gerät 
schicken. Lese ich die Zeit mit now() aus, kommt die aktuelle Uhrzeit 
auf allen Systemen korrekt. Sobald ich aber anfange, das mit 
DateUtils.LocalTimeToUniversal() umzurechnen, geht es drunter und 
drüber. PC liefert korrektes Ergebnis, raspberries liegen beide 4h 
daneben (=2x 2h Solldifferenz). Gleiches Problem mit nowUTC().
Also entweder ich bin zu doof, bei den raspberries mit dpkg-reconfigure 
tzdata richtig einzustellen (Europa->Berlin) oder ich sehe gerade den 
Wald vor lauter Offensichtlichkeiten nicht.

Habt ihr ähnliche Erfahrungen gemacht oder einen Lösungsansatz?
Mir wäre schon wichtig, daß der Code auf PC und raspberry gleich 
arbeitet, da das Programm später auf beiden Plattformen laufen soll.

Danke schon mal!

VG Gartenbahner

von foobar (Gast)


Lesenswert?

Schau dir mal die man-Page zu tzset an, insb wie er herausklamüsert, 
welche Zeitzone er benutzen soll.

von Gartenbahner (Gast)


Lesenswert?

Hi foobar,
ich habe mir das mal durchgelesen, aber wirklich weitergeholfen hat es 
nicht.
Aber dafür habe ich jetzt die Lösung in den fpc-sources von dateutils 
gefunden :)

PC:
1
Function LocalTimeToUniversal(LT: TDateTime): TDateTime;
2
begin
3
  Result:=LocalTimeToUniversal(LT,GetLocalTimeOffset);
4
end;

raspberry:
1
Function LocalTimeToUniversal(LT: TDateTime): TDateTime;
2
begin
3
  Result:=LocalTimeToUniversal(LT,-GetLocalTimeOffset);
4
end;
beachte das Minus beim raspberry. Zumindest weiß ich jetzt, was ich 
umgehen muß. :)
VG Gartenbahner

von Gerhard Z. (germel)


Lesenswert?

Schon krass. Hast du mal die beiden Versionsnummern von PC und RasPi 
verglichen? Muss ja wohl ein Bug in der älteren Version gewesen sein. 
Zum Glück lässt sich Lazarus aus den Sourcen sehr leicht kompilieren.

von Peter K. (Gast)


Lesenswert?

viel besser, einfach melden.Solche Fehler werden schnell behoben

von Andreas B. (bitverdreher)


Lesenswert?

Ist schon lange geschehen, daher ja der Unterschied.
Aktuell haben wir 2.0.12.
Das Raspi Repo steht noch auf einer uralt Version 1.6.2 von 2016

: Bearbeitet durch User
von Pandur S. (jetztnicht)


Lesenswert?

Localtime zu UTC ist etwas von Schwierigsten, das es gibt. Nicht nur 
wegen Sommerzeit, welche in einigen Laendern existiert, oder nicht, 
sondern auch wegen den Zeitzonen. Da gibt es welche, die haben nur eine 
Halbe, oder Viertelstunde Versatz, vielleicht auch nur temporaer.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.