Serverzeit

  • Hi,

    ich wollte mal wissen ob und wie es möglich ist die serverzeit vom normalen Microsofrt Zeit server (time.microsoft.com) auszulesen, oder ob man irgendwie die automatische aktualisierung der uhrzeit im pc aktivieren kann?

    lg phil-it

    Einmal editiert, zuletzt von philipp (17. September 2014 um 14:48)

    • Offizieller Beitrag

    Wenn es Dir darum geht, mit AutoIt die Zeit von einem NTP-Server zu holen, dann habe ich hier ein Script (nicht von mir, nur archiviert):

    Spoiler anzeigen
    [autoit]


    #include <Date.au3>
    $time = _TimeSync()
    MsgBox(0, '', 'Rechnerzeit:' & @TAB & _NowCalc() & @CRLF & 'Atomzeit: ' & @TAB & $time)

    [/autoit] [autoit][/autoit] [autoit]

    ;**************************************************************************************************
    ; Ab hier beginnen die Funktionen, zum holen der Zeit aus dem Internet (Quelle: http://www.autoitscript.com/forum/)
    ;**************************************************************************************************
    Func _TimeSync()
    Local $ntpServer = '1.de.pool.ntp.org'
    UDPStartup()
    Dim $socket = UDPOpen(TCPNameToIP($ntpServer), 123)
    If @error <> 0 Then Return SetError(1)
    Local $status = UDPSend($socket, MakePacket('1b0e010000000000000000004c4f434ccb1eea7b866665cb00000000000000000000000000000000cb1eea7b866665cb'))
    ;~ Local $status = UDPSend($socket, MakePacket('1b0e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'))
    If $status = 0 Then Return SetError(1)
    Local $data = '', $a = TimerInit() ; Timer setzen, damit im Fehlerfall die Schleife abgebrochen wird
    While $data = ''
    $data = UDPRecv($socket, 100)
    Sleep(100)
    If TimerDiff($a) > 1000 Then ExitLoop ; Wenn Timer > 1sek. (Fehler), dann Schleife verlassen
    WEnd
    If $data <> '' Then
    UDPShutdown()
    Local $unsignedHexValue = StringMid($data, 83, 8); Extract time from packet. Disregards the fractional second.
    Local $value = UnsignedHexToDec($unsignedHexValue)
    Local $TZinfo = _Date_Time_GetTimeZoneInformation()
    Local $TZoffset = -(UnsignedToLong($TZinfo[1]) + (UnsignedToLong($TZinfo[4]) * ($TZinfo[0] < 2)) + (UnsignedToLong($TZinfo[7]) * ($TZinfo[0] = 2)))
    Local $UTC = _DateAdd('s', $value, '1900/01/01 00:00:00')
    Return _DateAdd('n', $TZoffset, $UTC)
    EndIf
    SetError(1)
    EndFunc ;==>_TimeSync
    ;**************************************************************************************************
    Func MakePacket($d)
    Local $p = ''
    While $d
    $p &= Chr(Dec(StringLeft($d, 2)))
    $d = StringTrimLeft($d, 2)
    WEnd
    Return $p
    EndFunc ;==>MakePacket
    ;**************************************************************************************************
    Func UnsignedHexToDec($n)
    Local $ones = StringRight($n, 1)
    $n = StringTrimRight($n, 1)
    Return Dec($n) * 16 + Dec($ones)
    EndFunc ;==>UnsignedHexToDec
    ;**************************************************************************************************
    ; http://support.microsoft.com/kb/189323
    ; Gibt Die Zahl mit Vorzeichen zurück.
    ; Bei Fehler (kleiner 0 oder größer MAXINT_4) wird der übergebene Wert zurückgegeben und @error auf 1 gesetzt.
    Func UnsignedToLong($value)
    Local Const $OFFSET_4 = 4294967296
    Local Const $MAXINT_4 = 2147483647
    If $value < 0 Or $value >= $OFFSET_4 Then Return SetError(1, 0, $value) ;' Overflow
    If $value <= $MAXINT_4 Then
    Return $value
    Else
    Return $value - $OFFSET_4
    EndIf
    EndFunc ;==>UnsignedToLong
    ;**************************************************************************************************

    [/autoit]