有趣的 Java 日期格式化问题¶
今天在群里看到有人说,Java 的日期格式化有问题,如果用 YYYY-MM-dd
,今天的日期就会显示 2018-12-31
。我立马在本地用 Java REPL (aka Groovy) 跑了一下,果然如此:
$ date = new Date()
===> Sun Dec 31 10:51:26 CST 2017
$ import java.text.SimpleDateFormat
===> java.text.SimpleDateFormat
$ new SimpleDateFormat("YYYY-MM-dd").format(date)
===> 2018-12-31
解决方案是,把格式换为 yyyy-MM-dd
,确实就可以了。于是我就去研究了一下文档: Class SimpleDateFormat ,发现了问题:
y
代表 year
,而 Y
代表 week year
。根据 week year ,因为今年最后的一个星期在明年的部分更多,于是这个星期被归在了明年,所以这一周属于 2018,这就可以解释之前的那个输出问题了。