有时候,我们会发现无法连接windows的时间服务器或者内网的时间服务器本身的时间不准。

于是,可以通过如下python脚本示例,从公网任意服务器获取其服务器时间,这样更新的时间较为准确。

# -*- coding:utf-8 -*-

import datetime
import subprocess
import requests
import time

def set_system_time_from_server(url):
    try:
        response = requests.head(url, timeout=5)
        server_time = response.headers.get('Date')

        # 解析服务器时间(格林威治时间)
        server_time = datetime.datetime.strptime(server_time, '%a, %d %b %Y %H:%M:%S %Z')

        # 增加8小时,转换为北京时间
        server_time = server_time + datetime.timedelta(hours=8)
        server_time = server_time + datetime.timedelta(seconds=1)

        # 格式化为适合设置系统时间的字符串格式
        system_time_str = server_time.strftime('%Y-%m-%d %H:%M:%S')

        # 分割日期和时间
        date_str, time_str = system_time_str.split()

        # 设置日期
        subprocess.call(['cmd', '/c', 'date', date_str])

        # 设置时间
        subprocess.call(['cmd', '/c', 'time', time_str])

        print(u"本地系统时间已更新为服务器时间。")

    except Exception as e:
        print(u"出现错误:", str(e))

# 替换下面的url变量为你要获取时间的网站
url = 'http://www.baidu.com/'

set_system_time_from_server(url)
for i in range(30):
    print(u"感谢使用,本程序将在{}秒后自动关闭...".format(str(30-i)))
    time.sleep(1)

将该脚本,利用pyinstaller 打包成exe工具,可以在任意windows电脑上执行。

而且进一步可以加入到windows系统自动定时任务中,定时更新系统时间。