栗子

public static void main(String[] args) {SimpleDateFormat df1 = new SimpleDateFormat("YYYY-MM-dd");SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd");Calendar c = Calendar.getInstance();// 2021年12月25日周六c.add(Calendar.MONTH, 3);c.set(Calendar.DATE, 25);System.out.println("YYYY-MM-dd格式化结果:" + df1.format(c.getTime()));System.out.println("yyyy-MM-dd格式化结果:" + df2.format(c.getTime()));System.out.println("-------我是分割线---------");// 2021年12月26日 周日c.add(Calendar.DATE, 1);System.out.println("YYYY-MM-dd格式化结果:" + df1.format(c.getTime()));System.out.println("yyyy-MM-dd格式化结果:" + df2.format(c.getTime()));
}

结果

异常

同一个日期“2021-12-25”,使用yyyy-MM-dd和YYYY-MM-dd对其格式化,就结果来看,看不出区别。但是当日期为“2021-12-26”时,使用yyyy-MM-dd和YYYY-MM-dd对其格式化时,结果却不一样。一个是2021年一个却是2022年,这是为何。如果不小心使用了YYYY进行格式化,难免造成程序Bug啊!!

原因分析

日期格式化时,yyyy表示当天所在的年,而大写的YYYY代表是week in which year(JDK7之后引入的概念),意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,返回的YYYY就是下一年。

“YYYY format” 是 “ISO week numbering system”
“yyyy format” 是 “Gregorian Calendar”(公历)

y:year-of-era;正正经经的年;

Y:week-based-year;只要本周跨年,那么这周就算入下一年;也就是 12 月

结论

果断使用yyyy-MM-dd

踩坑:日期格式化yyyy-MM-dd和YYYY-MM-dd的区别相关推荐

  1. 踩坑之ios手机new Date(yyyy-MM-dd hh:mm:ss).getTime()返回NaN

    1.场景: 公司的小程序中有一个这样的功能,后端返回一个时间,时间格式是yyyy-MM-dd hh:mm:ss,然后前端根据这个时间和当前时间做比较,如果小于当前时间,则用户点击复习的按钮是能打开对应 ...

  2. JS 获取当前日期时间/时间日期格式化(时间戳 转 yyyy-MM-dd HH:mm:ss)

    // 不输入参数调用的就是当前时间 // 参数--需转换时间的时间戳 function formatDate(time = new Date()) {let date = new Date(time) ...

  3. 原生JS 日期格式化 (形如yyyMMdd hh:mm:ss等)

    代码 function formatDate(date, fmt) {var currentDate = new Date(date);var o = {"M+": current ...

  4. 写一个方法对日期格式化 new Date().format(yyyy-MM-dd HH:mm:ss)

    <script>Date.prototype.format = function (fmt) { //author: meizzvar o = {"M+": this. ...

  5. js日期格式化Date

    使用Date类进行日期格式化. 1 输入"yyyy-MM-dd hh:mm:ss"格式的String字符串,返回字符串 做一个简单判定,在当日显示为几点几分,同年为月日,不同年显示 ...

  6. SQLServer日期格式化

    SQLServer日期格式化 原文:SQLServer日期格式化 0   或   100   (*)     默认值   mon   dd   yyyy   hh:miAM(或   PM)       ...

  7. 奇淫巧技,springboot 全局日期格式化处理,有点香!

    最近面了一些公司,有一些 Java方面的架构.面试资料,有需要的小伙伴可以在公众号[程序员内点事]里,无套路自行领取 说在前边 最近部门几位同事受了一些委屈相继离职,共事三年临别之际颇有不舍,待一切手 ...

  8. SpringMVC日期格式化

    一.关于SpringMVC日期的格式化大概可分为四点 1.@ResponseBody方式返回json的日期格式化 2.ajax方式返回json的日期格式化 3.数据保存时String转Date 4.页 ...

  9. java日期格式化字符串,大小写区别,YYYY与yyyy,MM与mm,HH与hh

    YYYY 代表 Week Year yyyy 代表year MM 代表 月(Month) mm代表 秒(Min) HH代表24小时制 hh代表12小时制

最新文章

  1. 最全干货:从写简历,到面试、谈薪酬的那些技巧和防坑指南
  2. 浅谈Java中的final关键字
  3. Android–多线程之Handler下载图片源码
  4. spring冲刺第一天
  5. 测开之路十五:构造函数、析构函数
  6. 岗位推荐 | 微软AI Research Group招聘自然语言处理AI算法研究实习生
  7. 查找数组中任一峰值的下标
  8. python中home定义是什么_第48p,什么是函数?,Python中函数的定义
  9. javascript --- 非交互、交互、协作、任务
  10. mpvue v-html解决方案,mpvue开发小程序所遇问题及h5转化方案
  11. oracle中日期处理方法 汇总
  12. discuz二次元文章博客模板
  13. 【安全】LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol
  14. Docker安装Oracle教程
  15. ucos-II之就绪表解读
  16. 实用干货!大数据入门的常用技术栈全在这里了
  17. 阿里云高级技术专家王晨:云原生数据库PolarDB技术解密
  18. 五子棋java_Java五子棋小游戏完整源代码
  19. ElasticSearch + kibana 基础查询文档大全
  20. C# 基础 (3) 垃圾回收机制(Garbage Collector)

热门文章

  1. Juniper防火墙 二层透明模式配置
  2. 软银将联合能源公司开展绿色能源区块链试点
  3. S7-1200 PLC高速计数器
  4. CentOS 7.8 remove JDK
  5. 【STM32F10系列实操笔记】系统时钟的配置
  6. 数据密集型应用系统设计(3)
  7. PTA L3-021 神坛
  8. Python网络爬虫爬取携程网中的游记标题及内容
  9. HALCON 光圈和景深的关系
  10. HTML5 Canvas游戏之小蜜蜂