一个由“ YYYY-MM-dd ”引发的惨案 !
点击关注公众号,一周多次包邮送书
来源:blog.csdn.net/weixin_42669785/article/details/103972652
作者:6曦轩
前言
在元旦假期到来之际,我刚好准备出去飘几天,然而在使用一些 App 的时候,竟然被我发现了一个应该是由于前端粗心而导致的 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-31
2019-08-31 to YYYY/MM/dd: 2019-08-31
2019-12-31 to yyyy-MM-dd: 2019-12-31
2019-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~
版权声明:本文为CSDN博主「6曦轩」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42669785/article/details/103972652
推荐阅读
• 能用js实现的最终用js实现,Shell脚本也不例外• 面试官太难伺候?一个try-catch问出这么多花样• Spring Boot 实现各种参数校验,写得太好了,建议收藏!• 【建议收藏】MMU是如何完成地址翻译的?• 18张图,详解SpringBoot解析yml全流程• CPU 进入 IDLE 都做了啥?• 实战!阿里神器 Seata 实现 TCC模式 解决分布式事务,真香!• HTTP Host 头攻击,是什么鬼?• 一次线上 JVM 调优实践,FullGC 40 次/天 到10 天一次的优化过程
👇更多内容请点击👇