JAVA日期格式化大写YYYY 您所在的位置:网站首页 excel函数大小写有影响吗 JAVA日期格式化大写YYYY

JAVA日期格式化大写YYYY

2023-11-23 21:11| 来源: 网络整理| 查看: 265

好记性不如烂笔头,如果自己记不住那就记录下来吧!

Java开发中我们总喜欢用小写的yyyy-MM-dd格式化日期,有时候也难免不会用到大写的YYYY-MM-dd去计算两个日期之间的天数。

        我为什么要在此记录这个问题?是由于我们生产上就因为大写的YYYY差点造成了一场重大的生产事故,幸运的是在告警之前同事自己发现了这个BUG,挽救了这场事故。

接下来我们就看看这二者之间的区别。

一、Java中日期格式化年YYYY和yyyy的区别

请看下面这段代码:

package com.date; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class YearTest { public static void main(String[] args) { //2021年倒数第二周 Calendar calendar = Calendar.getInstance(); calendar.set(2021,Calendar.DECEMBER,20); Date date = calendar.getTime(); //2021年最后一周 Calendar lastCalendar = Calendar.getInstance(); calendar.set(2021,Calendar.DECEMBER,Calendar.DATE); Date lastDate = lastCalendar.getTime(); //倒数第二周小写的年y SimpleDateFormat sdfy = new SimpleDateFormat("yyyy-MM-dd"); System.out.println("倒数第二周小写的年y:"+sdfy.format(date)); //倒数第二周大小的年Y SimpleDateFormat sdfY = new SimpleDateFormat("YYYY-MM-dd"); System.out.println("倒数第二周大写的年Y:"+sdfY.format(date)); System.out.println("----------------------------"); //最后一周小写的年y SimpleDateFormat lastSdfy = new SimpleDateFormat("yyyy-MM-dd"); System.out.println("最后一周小写的年y:"+lastSdfy.format(lastDate)); //最后一周大小的年Y SimpleDateFormat lastSdfY = new SimpleDateFormat("YYYY-MM-dd"); System.out.println("最后一周大写的年Y:"+lastSdfY.format(lastDate)); } }

猜猜这段代码执行后的结果有啥不同?

执行结果:

倒数第二周小写的年y:2021-12-20 倒数第二周大写的年Y:2021-12-20 ---------------------------- 最后一周小写的年y:2021-12-28 最后一周大写的年Y:2022-12-28

在2021年12月倒数第二周的时候不管年份是大写还是小写看起来都没啥问题,但是到了最后一周问题就出现了,因为年份不一样了,大写的Y就跑到了新的一年2022年了,这究竟是为什么?

因为大写的“YYYY” 是week-based year 是ISO-8601规定的,它表示的是当天所在周属于哪一年,因为2021.12.27-2022.1.2 这一周夸年了,所有就格式化成下一年了,也就是2022年了。

二、Java中日期格式化天DD和dd的区别

请看下面这段代码:

package com.date; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class DayTest { public static void main(String[] args) { //2021年倒数第二周 Calendar calendar = Calendar.getInstance(); calendar.set(2021,Calendar.DECEMBER,20); Date date = calendar.getTime(); //2021年最后一周 Calendar lastCalendar = Calendar.getInstance(); calendar.set(2021,Calendar.DECEMBER,Calendar.DATE); Date lastDate = lastCalendar.getTime(); //倒数第二周小写的天d SimpleDateFormat sdfy = new SimpleDateFormat("yyyy-MM-dd"); System.out.println("小写的天d:"+sdfy.format(date)); //倒数第二周大小的天D SimpleDateFormat sdfY = new SimpleDateFormat("yyyy-MM-DD"); System.out.println("大写的天D:"+sdfY.format(date)); System.out.println("----------------------------"); //最后一周小写的天d SimpleDateFormat lastSdfy = new SimpleDateFormat("yyyy-MM-dd"); System.out.println("最后一周小写的天d:"+lastSdfy.format(lastDate)); //最后一周大小的天D SimpleDateFormat lastSdfY = new SimpleDateFormat("yyyy-MM-DD"); System.out.println("最后一周大写的天D:"+lastSdfY.format(lastDate)); } }

老实讲我还真没用过大写的DD

执行后的结果:

小写的天d:2021-12-20 大写的天D:2021-12-354 ---------------------------- 最后一周小写的天d:2021-12-28 最后一周大写的天D:2021-12-362

哇,看着362真开心,因为这一年马上就完了,还有3天就进入2022年啦!开心吗?

想必各位都看出区别了,大写的D打印出来的时间是这一年中的那一天,小写的d是这个月中的那一天。

有时候我们写代码写着写着就容易忽视这个问题,测试时也不容易测来,因此在格式化时间时,切记这个坑,以防出现生产事故。

敲代码时切记要细心,坚持工匠精神,追求精益求精。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有