多少人栽在 yyyy-MM-dd 上面了?

Posted 亦枫Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多少人栽在 yyyy-MM-dd 上面了?相关的知识,希望对你有一定的参考价值。

SimpleDateFormat 类用在 Java 编程中处理日期格式化,这是一个非常常见的使用场景。比如处理年月日时分秒的 Pattern 为:

yyyy-MM-dd HH:mm:ss

这里有一个问题,都是字母,为什么有的需要大写,有的需要小写呢?我们就拿年的字母 yyyy 与 YYYY 比较一下。

SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf2 = new SimpleDateFormat("YYYY-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.set(2019, Calendar.DECEMBER, 28);
System.out.println(sdf1.format(calendar.getTime()));
System.out.println(sdf2.format(calendar.getTime()));

运行结果如下:

2019-12-28
2019-12-28

结果一样,好像也没有区别;换个日期再试一下,把天数 28 改为 29 再试一遍,运行结果如下:

2019-12-29
2020-12-29

同一个 calendar 对象,yyyy 与 YYYY 格式化的结果竟然相差一年!

这是因为小写的 yyyy 表示的是传统意义上的年份,而大写的 YYYY 表示基于 ISO 8601 标准、按周定义的年份,完全不是一个概念。

关于 YYYY 格式,Java 文档是这么解释的:

Java's DateTimeFormatter pattern "YYYY" gives you the week-based-year, (by default, ISO-8601 standard) the year of the Thursday of that week.

我们可以在 Oracle 的 Java 官方文档上找到 Date and Time Patterns 不同字母大小写分别代表的含义:

因此,大家在平时的开发过程中,有使用 SimpleDateFormat 格式化时间日期数据的地方,一定要小心了。

推荐阅读:如何像 IDE 一样浏览 GitHub 网站的项目?
又发现一个挣零花钱的方式ADB: unknown command ?简直是搜索引擎界的新起之秀,你值得拥有!

长按识别二维码,关注我,一名爱叨叨的程序员

以上是关于多少人栽在 yyyy-MM-dd 上面了?的主要内容,如果未能解决你的问题,请参考以下文章

据说有人面试栽在了Thread类的stop()方法和interrupt()方法上

面试又栽在JVM调优上了!

thrift | 栽在九词君的田里,生根发芽,茁壮成长

jackson 转换 yyyy-MM-dd格式 少了一个小时问题解决(仅限中国)

致Android开发工程师:过了笔试,千万别栽在自己最擅长得技术面试上——70道Android技术面试题分享.

noip2004提高组题解