当前位置: 首页 > news >正文

求你了,别用 YYYY-MM-dd!

昨天下午看同事提交的代码,扫到这么一行,心里顿时咯噔一下:
new SimpleDateFormat(“YYYY-MM-dd”)

很多人敲代码顺手,或者被代码补全带偏,喜欢把 Y 和 M 全大写。但这在 Java 里,等于给系统埋了一颗隐蔽性极强的“跨年雷”,年底必炸。

为了预现场景,我构建了一段伪代码,故意把时间设置到了 2026 年 12 月 31 日:

importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;publicclassDateFormatTest{publicstaticvoidmain(String[]args){// 故意构造一个跨年边缘的时间:2026年12月31日Calendarcalendar=Calendar.getInstance();calendar.set(2026,Calendar.DECEMBER,31);Datedate=calendar.getTime();// 正确写法-小写 yyyySimpleDateFormatsdf1=newSimpleDateFormat("yyyy-MM-dd");// 错误写法- 大写 YYYYSimpleDateFormatsdf2=newSimpleDateFormat("YYYY-MM-dd");System.out.println("小写 yyyy: "+sdf1.format(date));System.out.println("大写 YYYY: "+sdf2.format(date));}}

运行结果:

小写 yyyy:2026-12-31大写YYYY:2027-12-31// 注意看,年份直接错乱了

发现没?原本是 2026 年的日期,用大写的 YYYY 格式化后,直接变成了 2027 年!

为什么会这样?

Java 的日期格式化标准里,大小写不同,意思完全不一样:

小写 yyyy:代表真实的日历年份,也就是你日历上看到的那一年。

大写 YYYY:代表的是 Week-Based-Year(基于周的年份)。简单来说,只要这一周跨年了——比如这周既有 2026 年底的几天,又包含了 2025 年的 1 月 1 日——那这周里的任何一天,年份都会被算作下一年。

这代码最恶心的地方就在这:平时测试根本发现不了,一切正常。只有到了每年最后那几天才会突然出问题,试想一下:用户的登录 Token 会因为「签发时间在未来」被集体拦截导致大面积掉线、扔进 MQ 的延迟消息也直接排到了下一年……细思恐极了朋友!

赶紧自查!

今天抽空打开 IDEA,按下 Ctrl + Shift + F(Mac 是 Cmd + Shift + F),全局搜一下 "YYYY(记得带上前引号)。如果真搜到了,赶紧改成 yyyy,算是提前排了个大雷。

顺手把这篇文章丢到团队群里,让大家都自查一下,能救一个是一个。


关注我的公众号,每天查看最新文章哦!

http://www.jsqmd.com/news/497902/

相关文章:

  • comsol 锂枝晶模型 此模型为多枝晶定向形核,可以直接拿来用,不用自己建模,三种物理场:相...
  • 26年春季学期学习记录第8天
  • MySQL索引入门:B+树原理+创建优化,新手也能看懂慢查询优化
  • 汽车电子构架演进(二)AUTOSAR的组成和演进
  • python+Ai技术框架的计算思维与人工智能学习网站设计与实现django flask
  • 【后端新手谈 03】告别满屏 try-catch!全局异常处理器的实用价值
  • 大模型落地实战:深度解析 Transformers、vLLM、Ollama 等 6 大主流部署框架
  • 违章真的会让车险涨价吗?很多车主都搞错了,看完少花几千块!(违章真的会影响车险保费吗?一文讲清楚交强险和商业险的浮动规则)
  • HarmonyOS6 半年磨一剑:RcTag 组件实战案例(一)内容展示与商品筛选
  • LangChain大模型应用开发指南:小白也能轻松掌握,收藏必备!
  • 当LSTM戴上“概率眼镜“:用贝叶斯视角玩转时间序列预测
  • 热销榜单:2026年北京本凡科技推荐的最值得的小程序开发平台TOP3,助力企业数字化转型
  • 【Python × AI】Memory 机制深度解析:为大模型植入“长期记忆”的艺术
  • 中文乱码,解决
  • 2026普通人转行,推荐一个好就业的方向——人工智能大模型,非常详细!
  • 低空经济+电力:输电线路无人机巡检及要求
  • 72 编辑距离
  • Vue.js如何通过WebUploader控件解决汽车制造CAD图纸的超大附件分片校验上传?
  • GitNexus:零服务器代码知识图谱引擎,让代码理解更智能
  • 重庆包装袋制作供应厂家排行
  • 飞腾平台 UEFI 与 U-Boot 启动方案对比及选型建议
  • 2-3层网络测试仪全面解析北京网测科技--Supernova 系列产品介绍与选型指南
  • [Win11 Vmware17 CentOS7.6]安装Linux操作系统详细步骤(附VMware17+CentOS7下载链接)
  • 干货!跨境电商出海短视频矩阵工具怎么选?
  • 如何解决帝国CMS 7.5编辑器粘贴Word文档时格式和图片丢失的问题?
  • python+Ai技术框架的健身房课程预约管理系统的设计与实现django flask
  • 深入理解 async/await:现代异步编程的终极解决方案
  • 医疗行业票据合规要求高?智能接口严守风控关
  • 吉林省GEO营销哪个服务商技术强
  • 【CANoe】使用IG发报文触发busOff后不能恢复教程