2024 年 12 月 30 日导出的报表日期变成 2025-12-30,只有跨年那几天出错,平时完全看不出来。乍看像缓存或者权限的锅,追下去往往不是。

DateTimeFormatter.ofPattern('yyyy-MM-dd')
# YYYY 是 week-based-year 只有周报场景才用

追下去是这么回事:大写的 YYYY 按 ISO 周所属年份计算,跨年那一周被归到下一年,年份整体多了一年。

碰到「YYYY 跨年周」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

具体做法是,格式串改回小写 yyyy;全局搜索 YYYY 逐个确认;补一条跨年日期的单元测试。

验收就看一点,用 2024-12-30 跑一遍格式化,输出年份仍然是 2024。

作者 9823189