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

Python如何计算开机时间到次日凌晨3点的间隔以实现自动关机

实现方案

以下是直接可用的修改后代码,核心逻辑是将固定的凌晨3点时间和次日日期做拼接,得到准确的关机时间:

import datetime
import os

# 获取当前开机时间
startup_date = datetime.datetime.now()
# 拼接次日凌晨3点的完整时间
shutdown_date = datetime.datetime.combine(
    startup_date.date() + datetime.timedelta(days=1),
    datetime.time(3, 0, 0)
)
# 计算距离关机的时间差(秒)
wait_seconds = (shutdown_date - startup_date).total_seconds()
print(f"将在 {shutdown_date} 执行关机,剩余时间:{wait_seconds/3600:.1f} 小时")

# 调用系统命令执行定时关机,根据你的系统选择对应命令即可
# Windows 系统用下面这行
os.system(f"shutdown -s -t {int(wait_seconds)}")
# Linux/macOS 系统用下面这行(需要root权限)
# os.system(f"shutdown -h +{int(wait_seconds//60)}")

逻辑说明

你之前的代码只是给当前时间加了1整天,得到的是和当前时分秒完全一致的明日时间,没有固定到3点。我们通过datetime.combine方法,把次日日期和固定的time(3, 0, 0)(凌晨3点的时间对象)拼接,就能不受开机时间影响,每次都得到准确的目标关机时间。
两个datetime对象直接做减法得到的是timedelta类型对象,调用total_seconds()就能拿到两个时间点相差的总秒数,直接传给系统关机命令即可生效。

可选优化

如果你希望如果开机时间在当天凌晨3点之前,就直接当天3点关机,不需要等到次日,可以加个简单判断:

target_time = datetime.time(3, 0, 0)
# 先判断当天3点有没有过
today_shutdown = datetime.datetime.combine(startup_date.date(), target_time)
if startup_date < today_shutdown:
    shutdown_date = today_shutdown
else:
    shutdown_date = datetime.datetime.combine(startup_date.date() + datetime.timedelta(days=1), target_time)

内容的提问来源于stack exchange,提问作者Federico Perez Diduch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:48:03