Einzelnen Beitrag anzeigen

Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
659 Beiträge
 
Delphi 12 Athens
 
#11

AW: TIdSNTP liefert immer (noch) Sommerzeit

  Alt 30. Okt 2023, 13:43
Ich benutze die Komponente "TIdSNTP", teil von Indy.

Letzte Woche habe ich die "korrekte" Zeit, also wenn um 11:10 abgefragt habe kam 11:10 als Antwort.
Heute kommt bei der Abfrage um 11:10 stattdessen 12:10 als Antwort.

Die Komponente konvertiert das selbst. Viel zu konfigurieren habe ich da auch nicht gefunden.
Falls es dich beruhigt: ab morgen funktioniert alles wieder!

Ich war mal neugierig. Das ist ein Fehler in Indy, und zwar in der Funktion TIdSNTP.NTPToDateTime in der Unit IdSNTP. Die ist dafür verantwortlich, die Bytes, die vom NTP-Server kommen, wieder in ein Delphi-Datum umzuwandeln.

Am Ende dieser Funktion steht folgendes:
Delphi-Quellcode:
  Value2 := Trunc(Value2 / NTPMaxInt * 1000) / 1000;
  Result := UTCTimeToLocalTime((Value1 + Value2) / 86400) + 2;
Zu Deutsch: das Datum, das sich aus der Umrechnung von Value1 und Value2 ergibt, liegt zwei Tage vor dem Delphi-Datum. Die Basis scheint also der 1.1.1900 zu sein und nicht wie beim Delphi-Format der 30.12.1899. Also muss man am Ende noch zwei Tage addieren, um auf das korrekte Delphi-Datum zu kommen, siehe die "+ 2" am Ende. Diese Addition wird aber erst NACH der Zeitzonen-Umrechnung gemacht. Das heißt, die Zeitzonen-Umrechnung erfolgt heute mit dem 28.10.2023 und nicht dem 30.10.2023. Daher geht die Umrechnung noch von Sommerzeit aus und addiert zwei Stunden und nicht eine.

Vielleicht kennt sich ja jemand mit Indy aus und kann das an der passenden Stelle als Bug einreichen.
  Mit Zitat antworten Zitat