You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 20:33:21