本帖最后由 ~零度 于 2024-1-24 16:58 编辑
程序采用Python编写,由nuitka在win10系统下打包成一个单独的exe。
在程序启动时会尝试连接网络,如果网络不可用则会等待1分钟后再次尝试(以免设置开机启动时,系统刚开机没有网),一共尝试100次
主要是通过获取HTTP GET访问百度网页返回的信息头中包含的时间日期来获得网络时间,误差大约小于1秒,具体看网络延时。
统一回复:
关于系统自带同步时间功能:
主要解决部分电脑无法通过系统的NTP同步时间的问题(例如不支持NTP协议、NTP端口被屏蔽、操作系统存在bug等原因)
关于多久同步一次以及是否开机启动:
程序本身无开机启动,也没有定时同步功能,运行后同步一次就结束了
如果需要自动同步系统时间,可以在系统自带任务计划程序里添加任务,并设置管理员权限,可以开机启动或者定时启动
具体设置的方法可以参考这篇博客:如何让自己的exe程序开机自启动 - 红磨坊后的白桦树 - 博客园 (cnblogs.com)
关于点了之后没反应或者没有界面出来:
运行时无界面,不放心可以先把系统时间改错(例如改成提前1小时),然后点一些运行程序看是否同步正确
源代码如下
[Python] 纯文本查看 复制代码 import requests
import datetime
import win32api
import time
if __name__ == '__main__':
try:
hea = {'User-Agent': 'Mozilla/5.0'}
# 尝试连接网络
max_retry_count = 100
response = None
while max_retry_count > 0:
try:
response = requests.get("https://www.baidu.com", headers=hea, timeout=10, verify=False)
if response.status_code == 200:
break
except Exception as e:
print(e)
time.sleep(60) # 等待一分钟,程序最长运行时间100*(60+10)=7000秒
max_retry_count -= 1
if response is not None:
# 若设置发现时钟落后8小时,则取消下一行尾部的注释,将时间加8小时
web_t = datetime.datetime.strptime(response.headers["Date"][5:25],
"%d %b %Y %H:%M:%S") # + datetime.timedelta(hours=8)
year = web_t.year
month = web_t.month
day = web_t.day
hour = web_t.hour
minute = web_t.minute
second = web_t.second
win32api.SetSystemTime(year, month, web_t.weekday(), day, hour, minute, second, 0)
else:
raise Exception("无法获取网络时间")
except Exception as e:
print(e)
打包的命令:
win10:
[Shell] 纯文本查看 复制代码 nuitka --standalone --onefile --show-progress --disable-console --windows-icon-from-ico=icon.ico --include-module=win32api SyncSystemTime.py
win7:
[Shell] 纯文本查看 复制代码 pyinstaller -w -y -i icon.ico SyncSystemTime.py --onefile --clean
部分地区如果蓝奏云打不开的,可以通过123pan下载
Win10及以上系统可用版本:下载地址:https://wwwb.lanzn.com/iS3001m4v7qh 密码:818b
Win7及以上系统可用版本(推荐,兼容性更好):https://wwwb.lanzn.com/imUZv1m5q3pi 密码:53iv
123pan链接:https://www.123pan.com/s/XCvbVv-sawl.html
均在相应系统下测试可用
在线查杀病毒信息:
任务计划程序:
如果修改后发现时间落后或者提前若干小时,可以反馈一下 |