java时间格式化错误_Java中日期格式化YYYY-DD的操作bug

news/2024/8/26 3:47:44

写这篇博文是记录下跨年的bug。去年隔壁组的小伙伴就是计算两个日期之间间隔的天数,因为跨年的原因计算有误。

当时测试组的小姐姐也没有模拟出来这种场景,导致上生产环境直接影响线上的数据。

今天逛技术论论坛正好遇到Java日期的操作bug。

1 yyyy 和 YYYY

别看字,看代码

@Test

public void testWeekBasedYear() {

Calendar calendar = Calendar.getInstance();

// 2019-12-31

calendar.set(2019, Calendar.DECEMBER, 31);

Date strDate1 = calendar.getTime();

// 2020-01-01

calendar.set(2020, Calendar.JANUARY, 1);

Date strDate2 = calendar.getTime();

// 大写 YYYY

SimpleDateFormat formatYYYY = new SimpleDateFormat("YYYY/MM/dd");

System.out.println("2019-12-31 转 YYYY/MM/dd 格式: " + formatYYYY.format(strDate1));

System.out.println("2020-01-01 转 YYYY/MM/dd 格式: " + formatYYYY.format(strDate2));

// 小写 YYYY

SimpleDateFormat formatyyyy = new SimpleDateFormat("yyyy/MM/dd");

System.out.println("2019-12-31 转 yyyy/MM/dd 格式: " + formatyyyy.format(strDate1));

System.out.println("2020-01-01 转 yyyy/MM/dd 格式: " + formatyyyy.format(strDate2));

}

输出结果

2019-12-31 转 YYYY/MM/dd 格式: 2020/12/31

2020-01-01 转 YYYY/MM/dd 格式: 2020/01/01

2019-12-31 转 yyyy/MM/dd 格式: 2019/12/31

2020-01-01 转 yyyy/MM/dd 格式: 2020/01/01

细心的同学应该发现了2019-12-31用YYYY/MM/dd

此刻变成了2020/12/31

??为何呢?YYYY这么大的能耐,能跑到2020年代去?

我2019年底买的东西,你如果用YYYY来格式化出库日期,我是不是得到2020年底才能收到货? 此bug问题挺大的呀!

YYYY 到底是何方妖怪?👺

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

例子:

下面就是用YYYY格式化代码

12/29/2019 将会格式化到2019年 这一周还属于2019年

12/30/2019 将会格式化到2020年 这一周已经属于2020年

看字说话YYYY,week-based year 是 ISO 8601 规定的。

2019-12-31号这一天,安周算年份已经属于2020年了,格式化之后就变成2020年,后面的月份日期不变。

2 dd 和 DD

private static void tryit(int Y, int M, int D, String pat) {

DateTimeFormatter fmt = DateTimeFormatter.ofPattern(pat);

LocalDate dat = LocalDate.of(Y,M,D);

String str = fmt.format(dat);

System.out.printf("Y=%04d M=%02d D=%02d " +

"formatted with " +

"\"%s\" -> %s\n",Y,M,D,pat,str);

}

public static void main(String[] args){

tryit(2020,01,20,"MM/DD/YYYY");

tryit(2020,01,21,"DD/MM/YYYY");

tryit(2020,01,22,"YYYY-MM-DD");

tryit(2020,03,17,"MM/DD/YYYY");

tryit(2020,03,18,"DD/MM/YYYY");

tryit(2020,03,19,"YYYY-MM-DD");

}

输出结果

Y=2020 M=01 D=20 formatted with "MM/DD/YYYY" -> 01/20/2020

Y=2020 M=01 D=21 formatted with "DD/MM/YYYY" -> 21/01/2020

Y=2020 M=01 D=22 formatted with "YYYY-MM-DD" -> 2020-01-22

Y=2020 M=03 D=17 formatted with "MM/DD/YYYY" -> 03/77/2020

Y=2020 M=03 D=18 formatted with "DD/MM/YYYY" -> 78/03/2020

Y=2020 M=03 D=19 formatted with "YYYY-MM-DD" -> 2020-03-79

看到没有?最后的3个日期都错误了。这里的大写的DD代表的是处于这一年中那一天,不是处于这个月的那一天,但是dd就没有问题。

小伙伴们一定要记住了不要犯类似的错误。 此锅我们不背。

结论

YYYY和yyyy不一样的,DD和dd也是不一样要切记。

以上所述是小编给大家介绍的Java中日期格式化YYYY-DD的操作bug,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!


http://www.niftyadmin.cn/n/3437274.html

相关文章

智能指针shared_ptr为什么会造成循环引用

循环引用是什么 循环引用是因为智能指针对象所管理的A类型的对象中, 含有指向该A类型对象的智能指针对象 可能会有点绕口, 请注意区分A类型的对象 和 智能指针对象 因为A类型对象 甲中的智能指针对象指向了另外一个A类型对象 乙, 而另外一个A类型对象 乙中的只能指针对象也指向…

MySQL 5.1.38

完全安装包http://mysql.isu.edu.tw/Downloads/MySQL-5.1/mysql-5.1.38-win32.msi包含了安装MySQL所需要的全部文件与配置向导以及可选组件,如基准套件和嵌入式服务器 基本安装包http://mysql.isu.edu.tw/Downloads/MySQL-5.1/mysql-essential-5.1.38-win32.msi只包…

【数据结构+算法】【模拟法】--- 螺旋矩阵填数

【题目描述】在一个n * n的矩阵中按照螺旋样式填入从1一直到n * n的一串整数,下面是当n 4时的矩阵:1 2 3 4 12 13 14 511 16 15 610 9 8 7 现在给出矩阵的边长n,直接输出该矩阵。【输入】一个整数,即矩阵的边长n。(n …

mysql 编码转换函数_MySQL字符集及MySQL编码转换

时间:2006-05-14 14:39:11类别:技术访问:7907今天找到这篇文章,里面提到从latin1到UTF8的MySQL编码转换。收藏一下,最近要将所有的数据库都转一次,一直错误的使用latin1,再不转以后麻烦大了。出…

linux下使用yum安装mysql、tomcat、httpd

为什么80%的码农都做不了架构师?>>> 一、linux下使用yum安装mysql 1、安装 查看有没有安装过: yum list installed mysql* rpm -qa | grep mysql* 查看有没有安装包: yum list mysql* 安装mysql客户端: yum install m…

python 回车新函数_python - 如何将回车键绑定到tkinter中的函数? - 堆栈内存溢出...

尝试运行以下程序。 当你点击Return时你必须确保你的窗口具有焦点 - 为了确保它确实如此,首先单击按钮几次,直到你看到一些输出,然后没有点击任何其他点击返回。import tkinter as tkroot tk.Tk()root.geometry("300x200")def fun…

HTTPS加密方式-全流程梳理

对称加密 通信的两端, 使用用一个秘钥对数据进行加密和解密操作, 常用的方法有AES, DES, 加密解密, 因为采用的对位的操作, 对位的异或和移位操作, 执行的过程中, 速度会很快 非对称加密 通信的两端, 生成公私秘钥, 任何一方加密的, 只能用另一方进行解密.(公加密, 私解密. …

2015第54周二

还在加班,团队一起在进行,感觉孤立无助,晚上肯定要晚了,然后明天估计还要早起去准备演示,感觉好累,为何要活的如此狼狈。