网络校时 python

网络校时 python

   由于手动调整和计算机时钟精度的问题,我的windows时间经常需要校正。以前用c#写过一个ntp的时间校正工具,为此从网上找了好多ntp server的ip地址,但最终发现渐渐的它们都不能用了。后来慢慢地感觉到自己对系统时钟的要求也没那么精确,于是开始打web server的主意:通常web server,特别是一些比较著名的网站的server总有一些是在线的。
  代码似乎也不是很复杂,基于python 3.0---
import  time
import  urllib.request
import  urllib.parse
import  ctypes


SetSystemTime 
=  ctypes.windll.kernel32.SetSystemTime
GetSystemTime 
=  ctypes.windll.kernel32.GetSystemTime

class  SYSTEMTIME(ctypes.Structure):
    c_ushort
=  ctypes.c_ushort
    _fields_ 
=   (
                (
' wYear ' , c_ushort), 
                (
' wMonth ' , c_ushort), 
                (
' wDayOfWeek ' , c_ushort), 
                (
' wDay ' , c_ushort), 
                (
' wHour ' , c_ushort), 
                (
' wMinute ' , c_ushort), 
                (
' wSecond ' , c_ushort), 
                (
' wMilliseconds ' , c_ushort), 
                )
    
def   __str__ (self):
        
return   ' %4d%02d%02d%02d%02d%02d.%03d '   %  (self.wYear,self.wMonth,self.wDay,self.wHour,self.wMinute,self.wSecond,self.wMilliseconds)

def  updateSystemTime():
    url
=   ' http://www.baidu.com '
    
try :
        response
=  urllib.request.urlopen(url)
        header
=  response.info()
        date
= header[ ' Date ' ]
        gmt
= time.strptime(date[ 5 : 25 ],  " %d %b %Y %H:%M:%S " )
        st
= SYSTEMTIME(gmt.tm_year,gmt.tm_mon,gmt.tm_wday,gmt.tm_mday,gmt.tm_hour,gmt.tm_min,gmt.tm_sec,0)
        SetSystemTime(ctypes.byref(st))
        
print ( ' 网络校时成功! ' )
    
except  Exception as ex:
        
print (ex)
        
print ( ' 网络校时失败 ' )
        
return  False
    
return  True
def  printCurTime():
    now
=  time.localtime(time.time())
    
print ( ' 当前系统时间: ' , time.strftime( " %Y-%m-%d %H:%M:%S " , now))
    
if   __name__ == ' __main__ ' :
    printCurTime()
    
if  updateSystemTime():
        printCurTime()
  保存文件名为updateTime.py,放入某个系统目录,在命令行中测试如下:

C:\>updatetime
当前系统时间: 2009-12-16 16:51:11
网络校时成功!
当前系统时间: 2008-12-16 16:51:12

C:\>

 之前,我故意把时间调整到了2009年。

  

你可能感兴趣的:(网络校时 python)