Zeitformat

  • Hallo

    wenn ich das NET TIME Kommando ausführe bekomme ich z.B. "4/27/2009 8:35 AM" zurück.
    Gibt es eine Autoit Funktion die diese Version von Datum und Zeit in das deutsche Format wandelt?

    Danke und Gruß

  • Hallo

    ich möchte die Zeit aus mehreren NT-Domänen mit der lokalen Zeit vergleichen.
    Ich sag nur "kerberos" ...

    Gruß

  • Hallo ernergy98,

    ich hab da mal was zusammengebaut...

    Spoiler anzeigen
    [autoit]

    $str = "4/27/2009 8:35 PM"
    MsgBox(4160, '', "Datum & Uhrzeit: " & _timeconvert($str))

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

    Func _timeconvert($data)
    $a_str = StringSplit($str," ")
    $d_str = StringSplit($a_str[1],"/")
    $z_str = StringSplit($a_str[2],":")
    If $a_str[3] = "PM" Then $z_str[1] += 12
    $str = $d_str[2]&"."&$d_str[1]&"."&$d_str[3]&" "&$z_str[1]&":"&$z_str[2]
    Return($str)
    EndFunc

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Vielen Dank ist gekauft.

    Ich habe noch ein paar Nullen eingebastelt.

    Spoiler anzeigen
    [autoit]


    $str = "4/7/2009 9:05 AM"
    MsgBox(4160, '', "Datum & Uhrzeit: " & _timeconvert($str))

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

    Func _timeconvert($data)
    $a_str = StringSplit($str," ")
    $d_str = StringSplit($a_str[1],"/")
    $z_str = StringSplit($a_str[2],":")
    If $a_str[3] = "PM" Then $z_str[1] += 12
    If $d_str[2] >= 0 and $d_str[2] <= 9 Then
    $d_str[2] = "0" & $d_str[2]
    EndIf
    If $d_str[1] >= 0 and $d_str[1] <= 9 Then
    $d_str[1] = "0" & $d_str[1]
    EndIf
    If $z_str[1] >= 0 and $z_str[1] <= 9 Then
    $z_str[1] = "0" & $z_str[1]
    EndIf
    $str = $d_str[2]&"."&$d_str[1]&"."&$d_str[3]&" "&$z_str[1]&":"&$z_str[2]
    Return($str)
    EndFunc

    [/autoit]


    Gruß

  • Ich hätte StringFormat verwendet:

    Spoiler anzeigen
    [autoit]

    $str = "4/2/2009 8:3 AM"
    MsgBox(4160, '', "Datum & Uhrzeit: " & _timeconvert($str))

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

    Func _timeconvert($data)
    $a_str = StringSplit($str, " ")
    $d_str = StringSplit($a_str[1], "/")
    $z_str = StringSplit($a_str[2], ":")
    If $a_str[3] = "PM" Then $z_str[1] += 12
    $str = StringFormat('%002i', $d_str[2]) & "." & StringFormat('%002i', $d_str[1]) & "." & $d_str[3] & _
    " " & StringFormat('%002i', $z_str[1]) & ":" & StringFormat('%002i', $z_str[2])
    Return ($str)
    EndFunc ;==>_timeconvert

    [/autoit]
  • Überredet! Vielen Dank

    Hat jemand eine Idee wie ich mit Autoit eine NTP-Zeit abfrage?

    Gruß

  • kenne keine udf hierfür... aber fang doch einfach die consolenausgabe von net time ab

  • @oliverh

    ich möchte die richtige Zeit abfragen, nicht die die mir eine Windows Domain gibt.

    Gruß

  • welche "richtige" zeit meinst du?!? atomuhrzeit? gkibts nen ntp server den du abfragen willst? ein paar mehr infos wären gut

  • nachdem ich vorhin etwas "geschlammpt habe
    mit den einstelligen Zeiten hier jetzt wenigsten's die AtomUhr...

    Spoiler anzeigen
    [autoit]

    #include<String.au3>
    #include <DATE.au3>

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

    InetGet("http://www.uhrzeit.org/atomuhr.html","Uhrzeit.html",1)
    $openfile = FileOpen("Uhrzeit.html",0)
    $read_1 = FileRead($openfile)
    sleep(4000)
    FileClose($openfile)
    FileDelete("Uhrzeit.html")
    $gettime = _StringBetween($read_1,'<div id="anzeige">','</div>')
    ;~ GUICtrlSetData($Label1,$gettime[0])

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

    $time = $gettime[0]

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

    $newtime = StringSplit($time,":")

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

    ;_SetTime($newtime[1],$newtime[2],$newtime[3])
    MsgBox(0, '', $newtime[1]&":"&$newtime[2]&":"&$newtime[3])

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

    Exit

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Braunschweig ist auch OK oder den hier "ntps1-0.cs.tu-berlin.de".
    Ich hab auch einen internen der auf Linux basiert und sich die GPS Zeit holt.

    Schnuffel
    meist Du wegen der Nullen - geschenkt!
    Die Atomzeit per IE ist auch eine Lösung ... vielen Dank.

    Gruß

    • Offizieller Beitrag

    Es gibt aber auch eine UDF, um direkt einen NTP-Server abzufragen:

    Spoiler anzeigen
    [autoit]


    #include <Date.au3>
    $time = _TimeSync()
    ;~ $aTime = StringSplit(StringMid($time, StringInStr($time, ' ')+1), ':')
    ;~ _SetTime($aTime[1], $aTime[2], $aTime[3])
    MsgBox(0, '', 'Rechnerzeit:' & @TAB & _NowCalc() & @CRLF & 'Atomzeit: ' & @TAB & $time)

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

    ;**************************************************************************************************
    Func _TimeSync()
    Local $ntpServer = "1.de.pool.ntp.org"
    UDPStartup()
    Dim $socket = UDPOpen(TCPNameToIP($ntpServer), 123)
    If @error <> 0 Then
    MsgBox(0, "", "Can't open connection!")
    Exit
    EndIf
    $status = UDPSend($socket, MakePacket("1b0e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"))
    If $status = 0 Then
    Return SetError(1)
    EndIf
    $data = ""
    While $data = ""
    $data = UDPRecv($socket, 100)
    Sleep(100)
    WEnd
    UDPCloseSocket($socket)
    UDPShutdown()
    $unsignedHexValue = StringMid($data, 83, 8); Extract time from packet. Disregards the fractional second.
    $value = UnsignedHexToDec($unsignedHexValue)
    $TZinfo = _Date_Time_GetTimeZoneInformation()
    $TZoffset = $TZinfo[1] * - 2
    $UTC = _DateAdd("s", $value, "1900/01/01 00:00:00")
    Return _DateAdd("n", $TZoffset, $UTC)
    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)
    $ones = StringRight($n, 1)
    $n = StringTrimRight($n, 1)
    Return Dec($n) * 16 + Dec($ones)
    EndFunc ;==>UnsignedHexToDec
    ;**************************************************************************************************

    [/autoit]

    Die Funktion hatte ich mal aus dem englischen Forum und dann bei mir archiviert. Ich finde sie jetzt aber nicht mehr, kann also nicht sagen, von wem die stammt. Falls das jemand weiß, bitte melden!

    • Offizieller Beitrag

    Hi,
    das Konvertieren der Zeit geht auch wesentlich einfacher ;)

    [autoit]

    $sDate = "4/27/2009 8:35 AM"
    $aDate = StringRegExp($sDate, '(\d{1,2})/(\d{1,2})/(\d{4}) (\d{1,2}):(\d{1,2}) ([AP]M)', 3)
    If $aDate[5] = 'PM' Then $aDate[3] += 12
    ConsoleWrite($aDate[1] & '.' & $aDate[0] & '.' & $aDate[2] & ' ' & $aDate[3] & ':' & $aDate[4] & @CRLF)

    [/autoit]
  • Und jetzt wieder StringFormat und in eine Funktion gepackt dann haben wir die kürzeste Lösung ;)

    [autoit]

    $str = "4/2/2009 8:3 AM"
    MsgBox(4160, '', "Datum & Uhrzeit: " & _timeconvert($str))

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

    Func _timeconvert($sDate)
    Local $aDate = StringRegExp($sDate, '(\d{1,2})/(\d{1,2})/(\d{4}) (\d{1,2}):(\d{1,2}) ([AP]M)', 3)
    Return StringFormat('%002i', $aDate[1]) & '.' & StringFormat('%002i', $aDate[0]) & '.' & $aDate[2] & _
    ' ' & StringFormat('%002i', $aDate[3]) & ':' & StringFormat('%002i', $aDate[4])
    EndFunc ;==>_timeconvert

    [/autoit]
    • Offizieller Beitrag

    Na, da hast Du aber AM/PM vergessen!
    Und überhaupt geht das auch noch kürzer:

    [autoit]


    $str = "4/2/2009 8:3 AM"
    MsgBox(4160, '', "Datum & Uhrzeit: " & _timeconvert($str))

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

    Func _timeconvert($sDate)
    Local $aDate = StringRegExp($sDate, '(\d{1,2})/(\d{1,2})/(\d{4}) (\d{1,2}):(\d{1,2}) ([AP]M)', 3)
    Return StringFormat('%02i.%02i.%02i %02i:%02i', $aDate[1], $aDate[0], $aDate[2], $aDate[3]+12*($aDate[5]='PM'), $aDate[4])
    EndFunc ;==>_timeconvert

    [/autoit]