zoukankan      html  css  js  c++  java
  • 一个由“ YYYYMMdd ”引发的惨案 !元旦来临前的警惕

    # 前言

    在元旦假期到来之际,我刚好准备出去飘几天,然而在使用一些 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

    如果我们日期改成 12.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

    转自:https://mp.weixin.qq.com/s/wGTwE2zvVla-ZYvKq_pwtA

    作者:程序员知识星球

    不积跬步,无以至千里;不积小流,无以成江海
  • 相关阅读:
    OpenCV人脸检测
    和机器学习和计算机视觉相关的数学(转载)
    操作系统课程设计 消息缓冲队列通信
    操作系统课程设计 线程的同步与互斥
    嵌入式考试Shell编程题
    Bash基础知识
    开始学习Shell/bash 加减乘运算
    RT-Thread Mini2440串口驱动
    Mini2440裸机RTC时钟驱动转化为字符串显示
    Mini2440裸机液晶屏TD35驱动
  • 原文地址:https://www.cnblogs.com/hzzjj/p/15751692.html
Copyright © 2011-2022 走看看