先把当时的情况摆出来。DeepSeek 的错峰优惠是北京时间 00:30 到 08:30,批处理脚本用 datetime.utcnow() 判断窗口,国内凌晨一点跑的任务按原价计费,一个月多花了两百多。

排查方向其实有限,先把可能性排一排。UTC 与北京时间差 8 小时,窗口判断整体偏移。也可能是容器默认时区是 UTC,脚本没显式指定。

还有一种情况,优惠按请求完成时间算,长任务跨窗就按结束时刻。另外,批量任务一次性提交,实际执行时间不可控。

上来先打印容器当前时区

python -c "import time;print(time.tzname,time.timezone)"

然后用 zoneinfo 显式换算北京时间

python -c "from zoneinfo import ZoneInfo;from datetime import datetime;print(datetime.now(ZoneInfo('Asia/Shanghai')))"

接着把调度时间改到窗口内并留出余量

python -c "print('schedule 01:00 Asia/Shanghai')"

末了核对账单里的计费时段字段

python -c "import json;print(json.load(open('bill.json')).get('period'))"

别只看报错消失,验证要多做一步。任务在北京时间 01:10 提交,账单里这批请求按优惠价计费,单价是原价的五折,当月费用回到预算内。

提醒一点。任何按时间窗口计费的优惠都要显式带时区,utcnow 加上容器默认时区,是最常见的错峰踩坑组合。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189