fix(api_push): naive published_at 改当 Asia/Shanghai,不再当 UTC
症状: 财联社/微信等中国源推 ingest 时,payload published_at 通常不带 tz
(naive 字符串),含义是北京时间的墙上时间。
后端之前用 .replace(tzinfo=timezone.utc) 强行当 UTC,导致入库后:
'2026-06-15 19:58:42' (naive,真意=北京 19:58) →
PG 存 2026-06-15 19:58:42+00 = 渲染成 2026-06-16 03:58:42+08
前端 dayjs(...).fromNow() 算到当前 +08 时间 20:55 → 显示 '7 小时内'(未来时间)
根因: 中国源给的 naive 字符串实际就是 Asia/Shanghai,不该被当 UTC
修法:
- 新增 zoneinfo + settings.tz 依赖
- naive → settings.tz(默认 Asia/Shanghai),再 astimezone(UTC) 入库
- aware → astimezone(UTC) 归一
注意: 只修未来的新数据;已入库的错位数据需要 backfill(见 PR 后讨论)