一个由“ YYYY-MM-dd ”引发的惨案 !元旦来临前的警惕 ~

程序IT圈

共 1756字,需浏览 4分钟

 ·

2022-01-01 14:53


# 前言


还记得前年在元旦假期的时候,我发现了一个应该是由于前端粗心而导致的 bug,在 2019.12.30 出发,结果 App 上显示的是 2020.12.30(吓得我以为我的订单下错了,此处是不是该把程序员拉去祭天了)。


鉴于可能会有程序员因此而被拉去祭天,而我以前学 Java 的时候就有留意过这个问题,所以我还是把这个问题拿出来说一下,希望能尽量避免这方面的粗心大意(毕竟这种问题也很难测出来)。


# 正文


public class DateTest {    public static void main(String[] args) {        Calendar calendar = Calendar.getInstance();        calendar.set(2019, Calendar.AUGUST, 31);        Date strDate = calendar.getTime();        DateFormat formatUpperCase = new SimpleDateFormat("yyyy-MM-dd");        System.out.println("2019-08-31 to yyyy-MM-dd: " + formatUpperCase.format(strDate));        formatUpperCase = new SimpleDateFormat("YYYY-MM-dd");        System.out.println("2019-08-31 to YYYY/MM/dd: " + formatUpperCase.format(strDate));    }}


我们来看下运行结果:

2019-08-31 to yyyy-MM-dd: 2019-08-312019-08-31 to YYYY/MM/dd: 2019-08-31


如果我们日期改成 12.31:

2019-12-31 to yyyy-MM-dd: 2019-12-312019-12-31 to YYYY-MM-dd: 2020-12-31

问题就出现了是吧,虽然是一个小小的细节,但是用户看了也会一脸懵,但是我们作为开发者,不能懵啊,赶紧文档查起来:




y:year-of-era;正正经经的年,即元旦过后;Y:week-based-year;只要本周跨年,那么这周就算入下一年;就比如说今年(2019-2020) 12.31 这一周是跨年的一周,而 12.31 是周二,那使用 YYYY 的话会显示 2020,使用 yyyy 则会从 1.1 才开始算是 2020。


这虽然是个很小的知识点,但是也有很多人栽到坑里,各位学完可以记录一下咯,觉得好的还可以点个赞关注一下。我在这里祝愿各位码代码时如有神助,永远没有 bug~


PS:如果觉得我的分享不错,欢迎大家随手点赞、在看。

 关注公众号:Java后端编程,回复下面关键字 


要Java学习完整路线,回复  路线 

缺Java入门视频,回复 视频 

要Java面试经验,回复  面试 

缺Java项目,回复: 项目 

进Java粉丝群: 加群 


PS:如果觉得我的分享不错,欢迎大家随手点赞、在看。

(完)




加我"微信获取一份 最新Java面试题资料

请备注:666不然不通过~


最近好文


1、Kafka 3.0重磅发布,弃用 Java 8 的支持!

2、你只会用 ! = null 判空?嘿嘿!

3、这次,Swagger-ui遇到对手了!

4、一个基于Spring Boot+Vue+Redis的物联网智能家居系统

5、本机号码一键登录原理与应用



最近面试BAT,整理一份面试资料Java面试BAT通关手册,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:关注公众号并回复 java 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ
浏览 32
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报