Windows计划任务执行Python脚本时datetime库时间差1小时问题
Windows计划任务执行Python脚本时间偏差1小时问题排查与解决
问题情况
- 创建Windows计划任务,每日固定在05:30、13:30、22:30执行调用Python脚本的.bat文件
- 任务能按时启动,但脚本里用
datetime.now()获取的时间小时数偏快1小时(比如计划05:30执行,输出显示06:30) - 电脑系统日期时间正常且已同步,任务触发器的「跨时区同步」设置无效
- 手动从任务调度器运行该任务时,时间获取完全正确
测试脚本
用于排查的测试代码:
import os, time from datetime import date, datetime def main(): now = datetime.now() shift = now.strftime('%H') file = open("timecheck.txt","a") file.write(f'Time is: {now}\n Shift hour is: {shift}\n\n') file.close() main()
测试结果:12:30计划任务自动执行时,输出时间为13:30;12:37手动运行任务,输出时间正确。
解决方法
1. 修正计划任务的时区与运行配置
- 打开任务计划程序,找到对应任务右键选择「属性」
- 切换到「触发器」标签,选中已设置的触发器点击「编辑」:确认时区和系统一致,取消「跨时区同步」的勾选
- 切换到「常规」标签,检查是否勾选了「不管用户是否登录都要运行」,如果勾选后出现问题,可尝试改为「只有用户登录时运行」(若业务允许),或者确认该模式下的时区环境变量是否正常
2. 让Python强制使用本地时区
计划任务的执行环境可能时区变量异常,可在脚本里明确指定时区:
方法一:使用pytz库(需先安装:pip install pytz)
from datetime import datetime import pytz # 替换为你的实际时区,比如Asia/Shanghai、Europe/London now = datetime.now(pytz.timezone('Asia/Shanghai'))
方法二:使用Python 3.9+自带的zoneinfo
from datetime import datetime from zoneinfo import ZoneInfo now = datetime.now(ZoneInfo('Asia/Shanghai'))
3. 检查.bat文件的执行环境
- 在.bat文件开头添加一行
echo %DATE% %TIME% >> bat_time_log.txt,记录bat执行时的系统时间,对比Python输出的时间,确认问题出在Python还是任务环境 - 确保.bat里调用的Python路径和你手动运行的一致,避免调用了虚拟环境或其他版本的Python
4. 更新系统与Python版本
部分旧版本的Windows任务计划程序或Python存在时区处理bug,更新到最新稳定版本可能解决问题:
- 安装Windows所有可用累积更新
- 将Python更新到3.8及以上的最新稳定版
内容的提问来源于stack exchange,提问作者nate8458
相关产品推荐
相关产品推荐

