找回密码
 加入
搜索
查看: 2090|回复: 9

[AU3基础] 請問要如何抓NTP Server的時間, 跟自己電腦相比, 超過10分鐘或小於10分鐘就顯示msgbox

  [复制链接]
发表于 2016-11-1 08:07:15 | 显示全部楼层 |阅读模式
請問要如何抓NTP Server的時間, 跟自己電腦相比, 超過10分鐘或小於10分鐘就顯示msgbox
发表于 2016-11-1 14:36:50 | 显示全部楼层
 楼主| 发表于 2016-11-1 16:07:34 | 显示全部楼层
回复 2# my788522


    您好, 這個我有試過, 顯示更新時間成功, 但是其實都沒有成功...><
发表于 2016-11-1 16:08:12 | 显示全部楼层
net time \\IP 先获取目标计算机的时间,然后再跟自己的计算机时间对比
 楼主| 发表于 2016-11-1 17:14:36 | 显示全部楼层
回复 4# heroxianf

這樣嗎? 我可以不要正則嗎?
#include <Constants.au3>

Local $foo = Run(@ComSpec & " /c net time \\10.32.15.183", @SystemDir, @SW_HIDE, $STDOUT_CHILD)

Local $output

While 1
    $output = StdoutRead($foo)
        If @error Then ExitLoop
        $outputTime=StringMid($output, 23,23)

        MsgBox(0,"ConsoleServer Time","ConsoleServer Time is "&$outputTime)

Wend
发表于 2016-11-1 17:51:12 | 显示全部楼层
本帖最后由 heroxianf 于 2016-11-1 17:53 编辑

回复 5# ipmitool


    按照你的意思,我能理解的就是,超过10分钟或者小于10分钟就提醒,有条件的。  我想的笨办法就是,把小时、分钟全部转换成秒加在一起,然后本机时间也是这么处理,对比得出是否是自己需要的条件来提醒。考虑到通用性,最好用正则把时间抓出来比较好吧。
发表于 2016-11-1 17:57:58 | 显示全部楼层
 楼主| 发表于 2016-11-2 11:18:53 | 显示全部楼层
回复 7# heroxianf


    有困難, 因為像今天11月2號, 用net time去抓, 會顯示112
這個情況到11月10號的時候, 會變成1110, 變成位數不對了...
如果有一台機器先到11/10, 這樣比較就會出錯了..
发表于 2016-11-2 11:22:07 | 显示全部楼层
不能连接外网,用net time同步局域网其他主机时间。
连接外网可以获取百度网页的时间,在对比本地时间。
ntp server能用的有http://www.citydog.me/1352.html
发表于 2016-11-4 10:48:04 | 显示全部楼层
回复 1# ipmitool

#Include <Misc.au3>
#include <Date.au3>
#include <array.au3>
 

 
$ntpServer = "time-nw.nist.gov" ;改為ini配置
local $var1,$var2
        ;Global Const $tagSYSTEMTIME = "short Year;short Month;short Dow;short Day;short Hour;short Minute;short Second;short MSeconds"
        ;Global Const $tagTIME_ZONE_INFORMATION = "dword Bias;byte StdName[64];ushort StdDate[8];dword StdBias;byte DayName[64];ushort DayDate[8];dword DayBias"
dim $TimeZone=8*60*60
UDPStartup()
Dim $socket = UDPOpen(TCPNameToIP($ntpServer), 123)
If @error <> 0 Then
    MsgBox(0,"","連接伺服器失敗!")
    Exit
EndIf
 
;$status = UDPSend($socket, MakePacket("1b0e010000000000000000004c4f434ccb1eea7b866665cb00000000000000000000000000000000cb1eea7b866665cb"))
$status = UDPSend($socket, MakePacket("1b0e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"))
If $status = 0 Then
    MsgBox(4096, "錯誤", "連接伺服器失敗,請查看網路連接!")
EndIf
 
$data=""
$i=0
While $data=""
        $i+=1
    $data = UDPRecv($socket, 100)
        If $i = 5 Then
        MsgBox(4096, "錯誤", "連接伺服器失敗,請更換伺服器位址!")
        Exit
        EndIf
    sleep(100)
WEnd
 
UDPCloseSocket($socket)
UDPShutdown()
$unsignedHexValue=StringMid($data,83,8); Extract time from packet. Disregards the fractional second.
$value=UnsignedHexToDec($unsignedHexValue)
$value=$value+$TimeZone
$UTC=_DateAdd("s",$value,"1900/01/01 00:00:00")
$ComputerTime=@YEAR&"/"&@MON&"/"&@MDAY&" "&@HOUR&":"&@MIN&":"&@SEC
$aDateDiff =Abs(_DateDiff("s",$UTC,$ComputerTime))
IF  $aDateDiff >600  THEN 
        MsgBox(0,"時間差大於10分鐘","時間差大於10分鐘   NTP Server時間:"&$UTC&"  主機時間為:"&$ComputerTime&" 時間差為:"&$aDateDiff& " 秒")
Else
        MsgBox(0,"時間差小於10分鐘","時間差小於10分鐘   NTP Server時間:"&$UTC&"  主機時間為:"&$ComputerTime&" 時間差為:"&$aDateDiff& " 秒")
EndIf



$var1=StringSplit(StringLeft($UTC,10),'/')
$var2=StringSplit(StringRight($UTC,8),':')

;_ArrayDisplay($var1)
;_ArrayDisplay($var2)

;_SetTime($var2[1],$var2[2],$var2[3])
;_SetDate($var1[3],$var1[2],$var1[1])


;MsgBox(0,"提示","NTP伺服器時間同步成功,當前系統時間為: "&$UTC)
 
Func MakePacket($d)
    Local $p=""
    While $d
        $p&=Chr(Dec(StringLeft($d,2)))
        $d=StringTrimLeft($d,2)
    WEnd
    Return $p
EndFunc
 
Func UnsignedHexToDec($n)
    $ones=StringRight($n,1)
    $n=StringTrimRight($n,1)
    Return dec($n)*16+dec($ones)
EndFunc

评分

参与人数 1金钱 +10 收起 理由
heroxianf + 10 我就知道要写这么多!

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-16 22:17 , Processed in 0.078684 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表