wkdxz 发表于 2022-9-7 17:31

python 快速修改日期,带恢复功能,已打包exe

本帖最后由 wkdxz 于 2022-9-7 17:38 编辑

因工作需要,会经常用到日期修改功能,把日期往前或往后调几天。
最近在学PySimpleGUI,所以做了个小工具来实现日期修改和恢复功能。
点击修改按钮:后弹出日期选择框,选择了日期后,电脑日期会被改为选择的日期。同时,会关闭自动设置时间的开关。
点恢复按钮:会获取网络时间,并将电脑日期和时间设置为网络时间。同时,会打开自动设置时间的开关。
如果你的电脑时间日期会错乱,比如BIOS掉电,日期显示错误时,可以直接点恢复按钮,修复电脑的时间和日期,与网络时间有一丢丢延时,普通用户可以忽略。









日期工具成品.exehttps://www.aliyundrive.com/s/VCeRqVdUx4h 提取码: iw54
源码下载:

pip install PySimpleGUI#第三方库

源码:为了省事,代码内直接使用了cmd命令来操作注册表和修改时间日期,没有使用三方库

from datetime import datetime
from urllib.request import urlopen
import PySimpleGUI as sg
import os, ssl, time

ssl._create_default_https_context = ssl._create_unverified_context


def gmtstr_to_localtime(gmtstr) -> datetime:
    return datetime.strptime(gmtstr, "%a, %d %b %Y %H:%M:%S GMT")


def datetime_from_utc_to_local(utc_datetime):
    now_timestamp = time.time()
    offset = datetime.fromtimestamp(now_timestamp) - datetime.utcfromtimestamp(
      now_timestamp)
    return utc_datetime + offset


def get_network_time():
    url = "https://www.baidu.com"#随便一个可用的网址都可以
    try:
      with urlopen(url) as res:
            utctime = gmtstr_to_localtime(res.getheader("Date"))
            return datetime_from_utc_to_local(utctime)
    except Exception as e:
      print(f"联网失败:{str(e)}")


def reg_sync(sync=True):#通过注册表空值“自动设置时间”的开关
    key = 'NTP' if sync else 'NoSync'
    cmd = f'reg add HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\W32Time\Parameters /v type /t reg_sz /d {key} /f'
    os.system(cmd)


def change_date(date_time):
    reg_sync(False)#禁止时间自动同步
    DATE = date_time.split()
    os.system(f'echo {DATE}|date')


def recover_date():#恢复正确时间,通过网络时间设置
    reg_sync(True)
    now = str(get_network_time())
    DATE, TIME = now.split()
    os.system(f'echo {TIME}|time')
    os.system(f'echo {DATE}|date')


def gui():
    layout = [[
      sg.CalendarButton('点击修改日期', key='修改', enable_events=True),
    ], ]
    window = sg.Window('日期工具', layout, font=('微软雅黑', 12))
    while True:
      event, values = window.read()
      if not event:
            break
      if event == '修改':
            change_date(values['修改'])
            break
      elif event == '恢复':
            recover_date()
            break

    window.close()


if __name__ == '__main__':
    gui()

wkdxz 发表于 2022-9-7 17:49

rhci 发表于 2022-9-7 17:39
这个可以有,就是需要网络。还是手机比对的

嗯,恢复需要网络支持,网络获取省事点。

rhci 发表于 2022-9-7 17:39

这个可以有,就是需要网络。还是手机比对的

godsoncai 发表于 2022-9-7 18:10

感谢楼主,顶上!

luxingyu329 发表于 2022-9-7 18:18

这个不错,界面挺好,我也想学学,tkinter太麻烦了

studentguo 发表于 2022-9-7 19:22

学习。。。。。。

likaiaixuexi 发表于 2022-9-7 19:35

这个还可以,老的主板经常掉电,系统时间对不上

emptynullnill 发表于 2022-9-7 21:51

就是一键脚本,打包成exe?

yyx5670 发表于 2022-11-17 16:42

看看,学习下代码
页: [1]
查看完整版本: python 快速修改日期,带恢复功能,已打包exe