Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TIdSNTP liefert immer (noch) Sommerzeit (https://www.delphipraxis.net/213964-tidsntp-liefert-immer-noch-sommerzeit.html)

omnibrain 30. Okt 2023 08:18

TIdSNTP liefert immer (noch) Sommerzeit
 
Ich nutze Delphi 11.2 (Patch 1) unter Windows 11 (22H2):

In unsere Software habe ich vor wenigen Wochen einen Check eingebaut um gegen einen Zeitserver unabhängig vom Rest des Systems gegen einen Zeitserver checken zu können, da unsere Kunden in der Vergangenheit Probleme mit der netzwerkinternen Zeitsynchronisation hatten.
Seit Sonntag haben wir "plötzlich" ein Stunde Abweichung.

Ich habe es auf den einfachst möglichen Test "eingedampft", einfach eine Form mit TIdSNTP-Komponente und einem Edit um den Server einzugeben. Und selbst so bekomme ich immer noch eine Zeit, die genau eine Stunde in der Zukunft liegt.
Habe ich etwas übersehen? Da wir jetzt "Normalzeit" haben hätte ich eher erwartet, dass es in den Vergangenen Wochen (während Entwicklung und Test) Probleme gegeben hätte.

Code:
  IdSNTP1.Host:=LabeledEdit1.Text;
  memo1.Lines.Add('Server: '+LabeledEdit1.Text+'Internetzeit: '+DateTimeToStr(IdSNTP1.DateTime));

Delphi.Narium 30. Okt 2023 09:18

AW: TIdSNTP liefert immer (noch) Sommerzeit
 
Liefert der Zeitserver Greenwich Mean Time also GMT bzw. UTC?

Wir liegen eine Stunde davor, also GMT - 1. Im Sommer GMT - 2.

Sollte deine Software mal in Sydney zum Einsatz kommen, musst du momentan eine Differenz von 11 Stunden berücksichtigen (Sommerzeit), bei Normalzeit ist die Differenz 10 Stunden.

Die Angabe des Zeitservers dürfte also stimmen. Die Differenz zur örtlichen Zeitzone musst Du selbst berücksichtigen.

omnibrain 30. Okt 2023 09:41

AW: TIdSNTP liefert immer (noch) Sommerzeit
 
Wie ich schon schrieb: Dann hätte ich letzte Woche 2 Stunden Abweichung haben müssen, stattdessen hat es bis dahin funktioniert.

Zur Verdeutlichung:
Code:
  IdSNTP1.Host:=LabeledEdit1.Text;
  memo1.Lines.Add('Server: '+LabeledEdit1.Text+' Internetzeit: '+DateTimeToStr(IdSNTP1.DateTime)+' Systemzeit: '+datetimetostr(now));
Output:
Zitat:

Server: ptbtime1.ptb.de Internetzeit: 30.10.2023 11:41:11 Systemzeit: 30.10.2023 10:41:11
...
Server: time.nist.gov Internetzeit: 30.10.2023 11:42:38 Systemzeit: 30.10.2023 10:42:41

Delphi.Narium 30. Okt 2023 09:55

AW: TIdSNTP liefert immer (noch) Sommerzeit
 
Was sagt Dir denn https://uhr.ptb.de/analog?
Wenn Du dort über der 6 auf das Dreieck und das t klickst, wird dir die Abweichung der Rechneruhrzeit von der korrekten Uhrzeit angezeigt.

omnibrain 30. Okt 2023 10:05

AW: TIdSNTP liefert immer (noch) Sommerzeit
 
MEZ (UTC+01:00)
Die lokale Uhr geht 44 ms nach ± 10 ms

Windows sagt
Zeitzone
(UTC+01:00) Amsterdam, Berlin, Bern Rom, Stockholm, Wien

Klapauzius 30. Okt 2023 10:10

AW: TIdSNTP liefert immer (noch) Sommerzeit
 
NTP Server liefern normalerweise UTC Zeit- Für die Umrechnung in die lokAle Zeit ist das Betriebssystem bzw das entsprechende Programm zuständig. Für unsere mitteleuropäische Zeitzone gilt also:
  • Die Sommerzeit entspricht (sofern ich mich nicht irre) UTC+2
  • Die Standardzeit sollte deshalb UTC + 1 sein

omnibrain 30. Okt 2023 10:15

AW: TIdSNTP liefert immer (noch) Sommerzeit
 
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.

Klapauzius 30. Okt 2023 10:39

AW: TIdSNTP liefert immer (noch) Sommerzeit
 
"Die Komponente konvertiert das selbst", steht das in der Hilfe zu Indy? Dann wäre das ein bug von Indy.

Versuch mal folgendes, das sollte die korrekte Zeitangabe liefern:

Delphi-Quellcode:
uses
  DateUtils;

var
 GMT: TDateTime;

...
  GMT := TTimeZone.Local.ToUniversalTime(IdSNTP1.DateTime);
  memo1.Lines.Add('Internetzeit GMT: '+DateTimeToStr(GMT));

omnibrain 30. Okt 2023 10:48

AW: TIdSNTP liefert immer (noch) Sommerzeit
 
Zitat:

Zitat von Klapauzius (Beitrag 1528732)
"Die Komponente konvertiert das selbst", steht das in der Hilfe zu Indy?

Ich ging auf Grund dessen was ich im Code erkennen kann und dem bisherigen Verhalten davon aus.
Wenn du mir einen Link zur Hilfe von Indy hast wäre das nett. https://www.indyproject.org/documentation/ ist seit Jahren tot. Und mit Delphi kam sie entweder nicht mit, oder ich finde sie nicht. F1 jedenfalls liefert nichts.

Uwe Raabe 30. Okt 2023 12:04

AW: TIdSNTP liefert immer (noch) Sommerzeit
 
Zitat:

Zitat von omnibrain (Beitrag 1528733)
Wenn du mir einen Link zur Hilfe von Indy hast wäre das nett. https://www.indyproject.org/documentation/ ist seit Jahren tot. Und mit Delphi kam sie entweder nicht mit, oder ich finde sie nicht. F1 jedenfalls liefert nichts.

Die Hilfe ist, wenn sie denn überhaupt installiert ist, im Menü unter Hilfe - Hilfe von Drittherstellern - Hilfe zur Indy-Bibliothek zu finden.

Bbommel 30. Okt 2023 12:43

AW: TIdSNTP liefert immer (noch) Sommerzeit
 
Zitat:

Zitat von omnibrain (Beitrag 1528731)
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.

Bbommel 30. Okt 2023 12:51

AW: TIdSNTP liefert immer (noch) Sommerzeit
 
Nachtrag: Hier ist das schon gefixt: https://github.com/IndySockets/Indy/...ols/IdSNTP.pas

Ich bin mal optimistisch, dass das zumindest im nächsten Delphi auch gefixt ist. In D11.2 muss man das wohl selber korrigieren.

bernau 30. Okt 2023 12:55

AW: TIdSNTP liefert immer (noch) Sommerzeit
 
Zitat:

Zitat von omnibrain (Beitrag 1528720)
Ich nutze Delphi 11.2 (Patch 1) unter Windows 11 (22H2):

In unsere Software habe ich vor wenigen Wochen einen Check eingebaut um gegen einen Zeitserver unabhängig vom Rest des Systems gegen einen Zeitserver checken zu können, da unsere Kunden in der Vergangenheit Probleme mit der netzwerkinternen Zeitsynchronisation hatten.
Seit Sonntag haben wir "plötzlich" ein Stunde Abweichung.

Bei mir das Gleiche. Verwende auch die Komponente. Hatte schon mal den Fehler, der verschwindet nach 1-2 Tagen wieder.

omnibrain 30. Okt 2023 12:57

AW: TIdSNTP liefert immer (noch) Sommerzeit
 
Ja, habe es durch Hinweis in der englischen DP auch gefunden. https://github.com/IndySockets/Indy/issues/386
Ich wusste nicht, dass Indy auf GitHub ist und habe es beim Googlen auch nicht gefunden.
Dann hoffe ich mal, dass der Fix im Delphi 12 dabei ist.

Uwe Raabe 30. Okt 2023 13:08

AW: TIdSNTP liefert immer (noch) Sommerzeit
 
Delphi 12 kommt mit einer Indy-Version aus September 2023, also schon ziemlich aktuell.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz