fix: 修复补跑误含 cninfo 三步与时区不一致 (P1-2/P1-3)
- P1-2: 提取 DEFAULT_NEWS_STEPS(全链路去 report+cninfo),定时/补跑/默认三处统一; 启动补跑不再误执行 cninfo 公告管道 - P1-3: 新增 scheduler/timeutil.py(调度时区统一入口,SCHEDULE_TZ 可覆盖, 默认 Asia/Shanghai);run_scheduler 定时/补跑/--once、crawler 补跑保护、 reporter 兜底日期全部改用调度时区,避免系统时区非上海时日期错位 - 新增 6 个测试;全量 282 passed
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
"""调度时区工具。
|
||||
|
||||
背景(P1-3):
|
||||
定时任务 cron 触发时区与"今天"的判定必须一致。此前 cron 用
|
||||
Asia/Shanghai,而 `date.today()` / `datetime.now()` 取系统时区——
|
||||
若系统时区不是 Asia/Shanghai(如 UTC),07:00 上海(=前一日 23:00 UTC)
|
||||
触发时 `date.today()` 会返回错误日期,整条 pipeline 落在错日目录。
|
||||
|
||||
统一入口:
|
||||
schedule_tz(): 调度时区(env SCHEDULE_TZ 可覆盖,默认 Asia/Shanghai)
|
||||
today_str(): 按调度时区返回 YYYYMMDD
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
from datetime import datetime
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
# 默认调度时区(与 .env 的 SCHEDULE_TIMES 语义一致)
|
||||
DEFAULT_SCHEDULE_TZ = "Asia/Shanghai"
|
||||
|
||||
|
||||
def schedule_tz() -> ZoneInfo:
|
||||
"""调度时区(env SCHEDULE_TZ 可覆盖,默认 Asia/Shanghai)。"""
|
||||
return ZoneInfo(os.environ.get("SCHEDULE_TZ") or DEFAULT_SCHEDULE_TZ)
|
||||
|
||||
|
||||
def now() -> datetime:
|
||||
"""当前时刻(调度时区,aware)。"""
|
||||
return datetime.now(schedule_tz())
|
||||
|
||||
|
||||
def today_str() -> str:
|
||||
"""按调度时区返回今天的 YYYYMMDD。"""
|
||||
return now().strftime("%Y%m%d")
|
||||
Reference in New Issue
Block a user