|
本帖最后由 kingfirekkk 于 2010-12-11 16:45 编辑
这两天头有点大了,想事情也不是很清晰了,请各位大大看看我的代码,有些机器上面运行没有问题,有些机器上面运行有问题啊。。。。。
以下代码为参考论坛某位大神的,被我改得不成样子了...;===========================================================
; 时间检查模块!
;===========================================================
$server="192.168.0.1" ;局域网的另外一台Winxp机器;
Global $CF = ''
Global $str = ''
Global $too = Run(@ComSpec & ' /c net time \\' & $server, '', 0, 2)
While 1
Sleep(1)
$str &= StdoutRead($too)
If @error Then ExitLoop
WEnd
$cl = StringTrimLeft($str,StringInStr($str,'是')+1) ;去除无效字符
$CF = StringSplit($cl,' ') ;分离获取年月日时间
$date = $CF[1]
timecheck()
Func timecheck()
Select
Case StringInStr($cl,"午")>0
;MsgBox(0,"值",$cl)
$time=$cf[3]
;MsgBox(0,"xx",$cf[3])
time4()
Case Else
;MsgBox(0,"值2",$cf[2])
;$time=$cf[2]
time3()
EndSelect
EndFunc ;==>timecheck
Func time3() ;没有上午下午的时候;
;MsgBox(0,"xx",UBound($cf))
;MsgBox(0,"xx",$cf[1])
;如果是下午,则加上12小时时差
;MsgBox(0,"Show time",$time)
$time=$cf[2]
$retime=StringSplit(StringStripWS($time,8),":")
;MsgBox(0,"Show time",$retime[2])
$retime[2]=StringLeft($retime[2],2)
$time=$retime[1]&":"&$retime[2]
$r=StringSplit($date&"/"&$retime[1]&"/"&$retime[2],"/") ;取年月日时分进行比对,以明确是否执行写入操作
if StringLen ($r[1])=1 Then $r[1]=000&$r[1] ;补齐年位数
if StringLen ($r[1])=2 Then $r[1]=00&$r[1]
if StringLen ($r[1])=3 Then $r[1]=0&$r[1]
if StringLen ($r[2])=1 Then $r[2]=0&$r[2] ;补齐月位数
if StringLen ($r[3])=1 Then $r[3]=0&$r[3] ;补齐日位数
if StringLen ($r[4])=1 Then $r[4]=0&$r[4] ;补齐时位数
if StringLen ($r[5])=1 Then $r[5]=0&$r[5] ;补齐分位数
;MsgBox(0,"test","服务器时间为:"&$r[1]&$r[2]&$r[3]&$r[4]&$r[5]&@CRLF&"本机时间为: "&@YEAR&@MON&@MDAY&@HOUR&@MIN)
if @YEAR=$r[1] and @MON=$r[2] and @MDAY=$r[3] and @HOUR=$r[4] and @MIN=$r[5] Or @MIN+1=$r[5] Or @MIN-1=$r[5] Then
MsgBox(0,"恭喜!","时间一致!")
Return
Else
MsgBox(0,"test","服务器时间为:"&$r[1]&$r[2]&$r[3]&$r[4]&$r[5]&@CRLF&"本机时间为: "&@YEAR&@MON&@MDAY&@HOUR&@MIN)
MsgBox(0,"警告!","当前时间差异大于一分钟,请再次确认!")
EndIf
EndFunc
Func time4() ;有上午下午的时候;
;MsgBox(0,"xx",UBound($cf))
;MsgBox(0,"xx",$cf[1])
If StringIsDigit(StringStripWS($CF[3],8)) = 0 Then ;识别时间所在数组,并识别上午、下午或24小时制
if $CF[2]="下午" Then $kcd=12 ;如果是下午,则加上12小时时差
$time = $CF[3]
$retime=StringSplit(StringStripWS($time,8),":")
;MsgBox(0,"xx",$time)
$retime[2]=StringLeft($retime[2],2)
;MsgBox(0,"xx",$time)
$time=$retime[1]+$kcd&":"&$retime[2]
EndIf
$r=StringSplit($date&"/"&$retime[1]+$kcd&"/"&$retime[2],"/") ;取年月日时分进行比对,以明确是否执行写入操作
if StringLen ($r[1])=1 Then $r[1]=000&$r[1] ;补齐年位数
if StringLen ($r[1])=2 Then $r[1]=00&$r[1]
if StringLen ($r[1])=3 Then $r[1]=0&$r[1]
if StringLen ($r[2])=1 Then $r[2]=0&$r[2] ;补齐月位数
if StringLen ($r[3])=1 Then $r[3]=0&$r[3] ;补齐日位数
if StringLen ($r[4])=1 Then $r[4]=0&$r[4] ;补齐时位数
if StringLen ($r[5])=1 Then $r[5]=0&$r[5] ;补齐分位数
;MsgBox(0,"test","服务器时间为:"&$r[1]&$r[2]&$r[3]&$r[4]&$r[5]&@CRLF&"本机时间为: "&@YEAR&@MON&@MDAY&@HOUR&@MIN)
if @YEAR=$r[1] and @MON=$r[2] and @MDAY=$r[3] and @HOUR=$r[4] and @MIN=$r[5] Then
MsgBox(0,"恭喜!","时间差异小于一分钟!")
$timere="Time Check OK"
Return
Else
MsgBox(0,"警告!","当前时间差异大于一分钟!")
$timere="Time Check NG"
EndIf
EndFunc
其实最终需要解决的问题其实是有时候在某些XP的机器上面,返回的时间是:2010/10/19 下午 03:58
有的机器返回的是: 2010/10/19 15:58
现在头有点大,搞不清东南西北了,不知道怎么改了,请各位大神不吝赐教,在此谢过啦。
2010/12/11 PM16:47 Updaet: 提供解决方法于第10楼! |
|