GetNetworkTime() - NTP Server abfragen

Veröffentliche deine funktionierenden Skripte und Funktionen

Moderator: jNizM

just me
Posts: 4863
Joined: 02 Oct 2013, 08:51
Location: Germany

GetNetworkTime() - NTP Server abfragen

24 Jul 2017, 02:39

Die Funktion habe ich wegen dieser Frage entwickelt. Sie holt sich das aktuelle Datum inklusive Zeit von einem Zeitserver im Internet.

Grundlagen:
Die Zeitserver liefern immer UTC Zeiten. Ich habe deshalb noch einige UTC-Funktionen zur Konvertierung zwischen UTC- und lokalen Zeiten dazugepackt.

Die Funktion berücksichtigt nicht die Laufzeiten im Internet. Die Rückgabewerte sind deshalb nicht immer 'absolut genaue Zeitangaben bis hin zur Sekunde'.

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus

Remaining with AHK 1.1.25.02 until v2 will become beta.
BoBo
Posts: 1603
Joined: 13 May 2014, 17:15

Re: GetNetworkTime() - NTP Server abfragen

24 Jul 2017, 04:08

Aaaasrein - :thumbup:
Ne frage vo einer bekennenden logikwurst: 'der echtzeit' ließe sich annähern durch ermitteln und aufaddieren von script- und weblaufzeit (IMHO irgendwas in richtung A_TickCount/QueryPerformanceCounter()-frickelei), oder??
Das windows-interne w32tm.exe retourniert (nach abfrage mit parameter /stripchart) die zeitdifferenz zw lokalem und zeitserver ("Display a strip chart of the offset between this computer and another computer"). Dazu die verprasste zeit der anfrage und scriptverwurstung, und man/frau wäre irgendwie schon nahe dran ... :shifty:
just me
Posts: 4863
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: GetNetworkTime() - NTP Server abfragen

24 Jul 2017, 04:53

Ja, das lässt sich bestimmt irgendwie berechnen. Das Cisco Dokument beschreibt z.B. noch weitere 'mögliche' Zeitstempeleinträge für Frage und Antwort. Allerdings glaube ich, dass sich Windows bei der Zeitsynchronisierung nicht auf nur eine Abfrage gegen einen Server verlässt.

Mit einer 'schnellen' Internetanbindung (ich habe 6 MBit) und nicht allzu 'verstopftem' Netz läuft die komplette Abfrage hier in der Regel weniger als 150 Millisekunden. Außerdem wartet die Funktion nur maximal 1 Sekunde auf eine Antwort und gibt 0 zurück, wenn in dieser Zeit keine ankommt. Die Abweichung sollte deshalb maximal 1 Sekunde betragen. Mir reicht das.
Remaining with AHK 1.1.25.02 until v2 will become beta.
just me
Posts: 4863
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: GetNetworkTime() - NTP Server abfragen

27 Jul 2017, 01:54

Moin BoBo,

wenn Dir eine 'grobe' Bestimmung der Abweichung genügt, reicht es, den von der Funktion gelieferten Zeitstempel (UTC) von A_NowUTC abzuziehen:

Code: [Select all] [Download] GeSHi © Codebox Plus

NetTime := GetNetworkTime()
Diff := A_NowUTC
Diff -= NetTime, S
MsgBox, Abweichung = %Diff% Sekunden
Ich bekomme damit hier immer 0 oder 1.
Remaining with AHK 1.1.25.02 until v2 will become beta.
BoBo
Posts: 1603
Joined: 13 May 2014, 17:15

Re: GetNetworkTime() - NTP Server abfragen

27 Jul 2017, 03:33

Yo funzt! Thx :)
Mit nachfolgendem code habe ich allerdings bei unmittelbar aufeinanderfolgender ausführung via ScITE4AutoHoteky einen fehler provoziert.
Keine ahnung ob S4AHK oder GetNetworkTime() hierfür ursächlich ist??

Code: [Select all] [Download] GeSHi © Codebox Plus

#SingleInstance, Force
#Include GetNetworkTime().ahk

UTC := A_NowUTC
UTC -= GetNetworkTime(), S
MsgBox % UTC "`n" GetNetworkTime() "`n" A_NowUTC

; "gethostbyname failed with error 11004"
Last edited by BoBo on 27 Jul 2017, 06:35, edited 1 time in total.
User avatar
jNizM
Posts: 2295
Joined: 30 Sep 2013, 01:33
GitHub: jNizM
Contact:

Re: GetNetworkTime() - NTP Server abfragen

27 Jul 2017, 04:29

msdn wrote:WSANO_DATA -> 11004
Valid name, no data record of requested type.
Der angeforderte Name ist gültig und wurde in der Datenbank gefunden, aber es sind ihm nicht die korrekten aufgelösten Daten zugeordnet. Das übliche Beispiel hierfür ist ein Versuch, einen Hostnamen mit dem DNS (Domänennamenserver) in eine Adresse aufzulösen (mit gethostbyname oder WSAAsyncGetHostByName). Es wird ein MX-Eintrag, aber kein A-Eintrag zurückgegeben—womit angezeigt wird, dass der Host vorhanden, aber nicht direkt erreichbar ist.

Konnte das Problem aber mit SciTE4Ahk nicht nachvollziehen oder rekonstruieren.. Vlt. war die Abfrage einfach zu schnell hintereinander und er konnte deshalb in der Zeit den Namen nicht auflösen bzw zuordnen (wie im Fehler beschrieben)
[AHK] 1.1.26.01 x64 Unicode | [WIN] 10 Pro (Version 1703) x64
My GitHub Profile | Donations are appreciated if I could help you

Return to “Skripte und Funktionen”

Who is online

Users browsing this forum: No registered users and 1 guest