System-Zeit über das Internet aktualisieren
Verfasst: 05.06.2006 13:43
Über obiges Thema habe ich in den PB-Foren Code-Beispiele gesucht; aber was ich fand hat entweder nicht funktioniert, blieb auf halber Strecke stehen oder es waren net-Befehle o.ä.
Daher war selbermachen angesagt:
Es wird hier nur die Zeit aktualisiert, Datum wäre aber auch möglich (lohnt hier aber wohl nicht).
Gruss
Helle
Edit: Am 6.5.2006 nur Kosmetik
Daher war selbermachen angesagt:
Code: Alles auswählen
;-------- System-Zeit setzen mittels Time-Protokoll Port 37 TCP, übertragen von der Physikalisch-Technischen
;-------- Bundesanstalt (PTB) in Braunschweig
;-------- "Helle" K.Helbing 5.6.2006 PB 4.0
Global SysTime.SYSTEMTIME ;PB-Structure
Global Verbindung.l
Global Buffer.l
Global Y.l
Global Z.l
If InitNetwork()
Buffer = AllocateMemory(4)
If Buffer
Verbindung = OpenNetworkConnection("ptbtime1.ptb.de", 37) ;oder ptbtime2, TCP ist Standard-Protokoll
If Verbindung ;bei erfolgreichem Verbindungsaufbau sendet die PTB 4 Bytes und schliesst die Verbindung
If ReceiveNetworkData(Verbindung, Buffer, 4)
GetSystemTime_(SysTime) ;muss aufgerufen werden für SetSystemTime!
;-------- Umsetzung der empfangenen 4 Bytes vom Big-Endian- ins Little-Endian-Format
!MOV esi,[v_Buffer]
!MOV eax,[esi]
!BSWAP eax ;in EAX steht danach folgender Sekunden-Wert: 2.272.060.800 (Unix-Startwert 1.1.1972, 00:00:00)
;+ seit diesem Zeitpunkt aktuell vergangene Sekunden
;-------- Zeit setzen
!XOR edx,edx
!MOV ebx,86400 ;60*60*24 Sekunden pro Tag
!DIV ebx ;EAX enthält danach die vergangenen Tage seit dem 1.1.1900 (war Startwert 0)
!MOV [v_Y],edx ;EDX enthält als "Restwert" die seit Mitternacht vergangenen Sekunden
!MOV [v_Z],edx
Y = Y / 3600 ;verbliebende "Tages-Sekunden" in Stunden umrechnen
SysTime\wHour = Y ;Stunden setzen
Z = Z - Y * 3600 ;diese "verbrauchten" Sekunden vom Rest abziehen
Y = Z
Z = Z / 60 ;die restlichen Sekunden in Minuten umrechnen
SysTime\wMinute = Z ;Minuten setzen
Z = Y - Z * 60 ;der übrig gebliebene Rest sind die Sekunden
SysTime\wSecond = Z ;Sekunden setzen
SetSystemTime_(SysTime) ;vorher muss GetSystemTime aufgerufen werden!
EndIf ;Im Gegensatz zu SetLocalTime berücksichtigt SetSystemTime
;die Zeitzone sowie Winter/Sommer-Zeit!
Else
OpenConsole()
PrintN("Verbindung mit Braunschweig nicht zustande gekommen!")
Delay(60000)
CloseConsole()
EndIf
FreeMemory(Buffer)
EndIf
EndIf
End
Gruss
Helle
Edit: Am 6.5.2006 nur Kosmetik