按周汇总的报表里 2025 年最后一周的数据跑到了 2026 年 W01,2025 年只剩 51 周,财务核对总额时发现少了一截。乍看像缓存或者权限的锅,追下去往往不是。
python -c "import datetime as d; print(d.date(2025,12,29).isocalendar())" python -c "import datetime as d; print(d.date(2026,1,1).isocalendar())"
追下去是这么回事:ISO 8601 的周从周一开始,含当年第一个周四的那一周算第 1 周。12 月 29 日到 31 日正好落在下一年的第 1 周里,按自然年截断就会把这段数据切走。
「ISO 周编号」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
偶发问题先统计频率,一小时几次和一天一次,查法完全不同。改完顺手把文档补一句,省得下次自己重新推一遍。
具体做法是,周维度统计统一用 ISO 周编号 不要用自然年加周序号;年份取周所属年 不是日期里的年;跨年那几天单独出一张对照表 让业务确认归属;报表口径写进字段说明 避免下一个人改回去。
验收就看一点,2025-12-29 和 2026-01-01 都归到 2026-W01 2025 年的周数补齐到 52。
