解析日志里的 2026-03-01T10:00:00+0800,time.Parse(time.RFC3339, s) 直接报 parsing time: cannot parse "00" as "Z07:00"。同一批日志里带 +08:00 的记录却能过。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

date -d '2026-03-01T10:00:00+0800' +%s
date -d '2026-03-01T10:00:00+08:00' +%s

RFC3339 要求偏移带冒号,+0800 是另一种常见写法,Go 的布局串必须换成 -0700 才认。布局和输入只要差一个字符,解析就整条失败。这一点先确认清楚,后面就不用反复试。

「RFC3339 偏移」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。

偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

具体做法是,按来源选布局 RFC3339 配 +08:00 -0700 配 +0800;解析前先把偏移补成带冒号的形式;两种格式都试一轮 取第一个成功的;把线上真实样本放进表驱动测试。

改完照着核一遍,两种偏移写法都解析出同一个时间戳 转 UTC 后都是 02:00。

作者 9823189