写点什么

慎用 Java 日期格式化

2015 年 1 月 04 日

2014 年 12 月 29 日, Reddit 上一条寥寥几语的留言引起了大量的回复,这条留言说道:

今天有可能变成 2015 年 12 月,快点修复它。

这条留言实际指向了 Twitter 上的一个帖子,这个帖子提醒大家,如果使用了YYYY 的格式符来格式化日期,那么就有可能用错格式了。

Reddit 的一位读者解释说,Twitter 由于误用格式符,把当天的日期变成了 2015 年 12 月的某天。

那么日期为什么忽然变得不对了?原因是开发人员误用的格式符代表的是一种不同的日历系统。现行的公历通常被称为格里高利历(Gregorian calendar),它以 400 年为一个周期,在这个周期中,一共有 97 个闰日,在这种历法的设计中,闰日尽可能均匀地分布在各个年份中,所以一年的长度有两种可能:365 天或 366 天。而本文提到的被错误使用的历法格式,是国际标准 ISO 8601 所指定的历法。这种历法采用周来纪日,样子看起来是这样的:2009-W53-7。对于格里高利历中的闰日,它也采用“闰周”来表示,所以一年的长度是 364 或 371 天。并且它规定,公历一年中第一个周四所在的那个星期,作为一年的第一个星期。这导致了一些很有意思的结果,公历每年元旦前后的几天,年份会和 ISO 8601 纪年法差一年。比如,2015 年的第一个周四是 1 月 1 日,所以 1 月 1 日所在的那周,就变成了 2015 年的第一周。代表 ISO 8601 的格式符是YYYY,注意是大写的,而格里高利历的格式符是小写的yyyy,如果不小心把这两者搞混了,时间就瞬间推移了一年!维基百科上也有词条专门解释ISO 8601。

作为Java 开发者,只要搞清楚 YYYYyyyy区别,准确地使用两者,就不会出现这种错误。Reddit 的评论中也有读者提到,在 Joda Time 中,使用YYYY是没有问题的。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2015 年 1 月 04 日 03:498314
用户头像

发布了 77 篇内容, 共 30.5 次阅读, 收获喜欢 18 次。

关注

评论

发布
暂无评论
  • 食堂就餐系统

    系统中每个消费者都有一张卡,在管理中心注册缴费,卡内记着消费者的身份、余额。

    2020 年 10 月 25 日

  • 架构师训练营 -- 第二周学习总结

    件发历谈,述件发发历,及一段标性件在过中诞了程言使计机解现世的题并于了了程言及程法演方,面过编,向数程到在面对以面连编,过更的近用端更抽效化户的现及用式

    2020 年 6 月 14 日

  • 牛笔了!难道 Android 真的凉了?Android 面试题及解析

    想要成為一名優秀的Android開發,你需要一份完備的 知識體系,在這裏,讓我們一起成長為自己所想的那樣。

    2020 年 12 月 31 日

  • 每周一起背 10 句 | week 03

    欢迎来到第三周的背10句!

    2020 年 5 月 30 日

  • 软件设计原则 - 第三周总结

    听师课,得向象发就把统的象部到然不的这类填方和性比电系,们到 户订、品支等对,些象他计sres然在制组调这sres满业需,然开起快但次更求哪都改每上不这出题是里问,复的题多又重现,还有某个类的法于求更要改而个序用他这样就导致这个对,个了这导了统合严,以只了

    2020 年 6 月 24 日

  • 应用 1:正则如何处理 Unicode 编码的文本?

    在使用Unicode的时候你要弄明白是拿Unicode去匹配,还是编码后的某部分字节去进行匹配。

    2020 年 6 月 29 日

  • 致「从 0 开始学架构」专栏订阅用户

    在我的专栏结束后,今天又有一个好消息想分享给你,而且这件事情离不开每位订阅专栏同学的支持。

    2018 年 10 月 10 日

  • 学非探其花 要自拔其根

    世之奇伟、瑰怪,非常之观,常在于险远,而人之所罕至焉,故非有志者不能至也。

    2021 年 1 月 10 日

  • nested exception is java.lang.IllegalStateException: refreshAfterWrite requires a LoadingCache 异常解决

    nested exception is java.lang.IllegalStateException: refreshAfterWrite requires a LoadingCache异常解决

    2020 年 8 月 7 日

  • 第二周总结

    che 实有法 ete 方法是需要暴露应程的bd是露进调如将rbuid暴用应可误ri方致c 务效。按照接隔原:强程它要。说使ce类实现两个,口get ptee给序接 u 系调而

    2020 年 6 月 17 日

  • 加入生财有术后,我获得了什么

    我是一个挺爱折腾的人,以前只接触到同学和同事这种小圈子的时候,感觉自己就是个另类,对啥都有好奇心,也常常交不到能并肩作战的知心朋友。

    2020 年 6 月 18 日

  • 开发人员应当避免的代价高昂的职业错误

    好多人问我一个问题,作为一名开发工程师,有没有应该避免犯的一些职业错误?那些错误,一旦触犯,会付出高昂的代价。答案是肯定的,今天我们就来聊一下,那些年被人忽略的职业错误。

    2020 年 7 月 6 日

  • 免费还是收费?WinRAR 的生意经

    压缩软件WinRAR一度成为压缩软件里事实上的标配。其发行公司在商业上究竟采取了哪些策略,铸就了它的成功?

    2018 年 6 月 15 日

  • Reddit:天涯论坛美国版

    Reddit是美国非常著名的一个论坛,按照访问量来说,它也是美国第四大网站,全球第八大。Reddit同时是一个看起来非常复古,初来驾到不知道怎么入门的论坛。

    2018 年 9 月 21 日

  • 分布式柔性事务的 TCC 方案

    TCC概念由Pat Helland于2007年发表的一篇名为《Life beyond Distributed Transactions:an Apostate’s Opinion》的论文提出, 在该论文中,TCC还是以Tentative-Confirmation-Cancellation命名。

    2020 年 6 月 16 日

  • 11 周命题作业

    导致系统不可用的原因有哪些?保障系统稳定高可用的方案有哪些?请分别列举并简述。

    2020 年 8 月 25 日

  • 倒排索引介绍

    2019 年 6 月 28 日

发现更多内容

架构师训练营--第一周学习总结

花花大脸猫

极客大学架构师训练营

陆强作业

Mr.Monkey

ARTS week 04

刘昱

「架构师训练营」第1周学习总结

guoguo 👻

极客大学架构师训练营

ARTS week 3

锈蠢刀

架构师训练营第一周总结

Raymond

ARTS-weekly-32

落英坠露

ARTS 打卡计划

作业:食堂就餐卡系统UML图

Dawn

极客大学架构师训练营

食堂就餐卡系统架构设计

Raymond

恕我直言,我怀疑你并不会用 Java 枚举

沉默王二

Java 枚举

S型曲线 - 第一曲线

石云升

S型曲线 第一曲线 连续性创新

学习总结

Mr.Monkey

写简历没模板?别怕,这些开源项目帮你搞定!

JackTian

GitHub 面试 求职 开源项目 简历模板

架构师训练营-第一周学习笔记

Dawn

极客大学架构师训练营

第一周总结 - 架构文档

孙志平

Intellij IDEA 常用快捷键

insight

食堂就餐卡系统设计

J.Spring

极客大学架构师训练营

架构师训练营--第一周作业

花花大脸猫

极客大学架构师训练营

架构第一周-学习总结

J.Spring

极客大学架构师训练营

读笔 | 迷茫期问问自己这三个问题

张鸱鸺

读书笔记 个人成长 心灵圣经

最全干货:从写简历,到面试、谈薪酬的那些技巧和防坑指南

四猿外

深度思考 程序员 个人成长 面试 求职

数据中台各种架构图

久吾尔岂

数据中台

第一周总结

森林

这个神器让你拥有最佳的打印阅读体验

非著名程序员

chrome 程序员 效率工具 插件

当选择越来越多,我们为什么反而越来越不开心

七镜花园-董一凡

生活 情感

ARTS Week2

姜海天

ARTS 打卡计划

iOS 动画 - 窗景篇(二)

柯烂

ios objective-c swift 动画 移动

重学 Java 设计模式:实战组合模式(营销差异化人群发券,决策树引擎搭建场景)

小傅哥

设计模式 重构 代码质量 代码坏味道 组合模式

阿里《Java开发手册》也有bug?

王磊

Java 性能优化 Java性能

陈虻语录(摘)

YoungZY

读书

学习总结-第1周

饶军

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

慎用Java日期格式化-InfoQ