python同步系统时间

python同步系统时间

公司的电脑比较老旧,主板上的电池也没电了,每天都得手动调时间,自动同步也因为日期每天都被重置了而无法同步ntp服务器,想拆开换电池发现机箱也打开不了,emmm...=。=
无奈之下,自己做一个同步时间的脚本吧,然后用bat运行,加入开机启动项每天开机自动同步下时间就可以了

updateTime.py

因为不清楚NTP服务器的相关协议,网上找到的NTP服务器地址也不会使用,只好用比较笨的办法,找到一个能够提供当前时间的网站,爬下来,提取出时间的信息,再修改系统的时间
我用的是这个网站提供的时间http://time.tianqi.com/,python代码如下:

import os
import urllib.request 
import re
### ====================处理编码问题====================
#import sys
#import io
#sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') 
### ====================处理编码问题====================

url = "http://time.tianqi.com/"
opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6')]

def getInformation(url):   
    wp = opener.open( url ) 
    ch = wp.read().decode('utf-8')
    return ch

def getMonth(str):
	return {
        "Jan":1,
        "Feb":2,
        "Mar":3,
        "Apr":4,
        "May":5,
        "Jun":6,
        "Jul":7,
        "Aug":8,
        "Sep":9,
        "Oct":10,
        "Nov":11,
        "Dec":12,
	}.get(str,"error")

def setTime():
    ch = get_getInformation( url );

    timeStr = re.search(r'<p id="times">.*</p>', ch).group()
    timeStr = re.search(r'>.*<', timeStr).group()
    numPattern = re.compile(r'\d+')   # 查找数字
    StrPattern = re.compile(r'\S+')   # 查找字符串
    result = numPattern.findall(timeStr)

    print(timeStr)
    hour = result[2]
    minute = result[3]
    second = result[4]
    year = result[1]
    month = getMonth(StrPattern.findall(timeStr)[2])
    date = result[0]

    os.system("date %d-%d-%d" % ( int(year) , int(month) , int(date)) )
    os.system("time %d:%d:%d.0" % ( int(hour) , int(minute) ,int(second)) )
    
if __name__ == '__main__':
    print("--------------------begin update time--------------------")
    setTime()
    print("--------------------update time success--------------------")

updateTime.bat

创建updateTime.bat,运行就可以直接更新时间

@echo off
python updateTime.py
# pause

设置为开机启动项

不同系统有不同的设置方式,这里就不详细展开了,把updateTime.bat加到开机启动项就可以了