听说又有兄弟因为用YYYY-MM-dd被锤了...
还记得去年分享过一篇日期格式化使用 YYYY-MM-dd 的潜在问题的文章不?
历史又重演了...
事故现场
我们来写个单元测试,重现一下这个问题。
测试逻辑:
- 创建两个日期格式化,一个是出问题的
YYYY-MM-dd,另一个是正确用法yyyy-MM-dd - 分别去格式化两个不同的日期:2020年12月26日(周六),2020年12月27日(周日)
具体代码如下:
public class Tests {
@Test
public void test() throws Exception {
SimpleDateFormat df1 = new SimpleDateFormat("YYYY-MM-dd");
SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
// 2020年12月26日周六
c.set(Calendar.DATE, 26);
System.out.println("YYYY-MM-dd = " + df1.format(c.getTime()));
System.out.println("yyyy-MM-dd = " + df2.format(c.getTime()));
// 分割线
System.out.println("========================");
// 2020年12月27日 周日
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()));
}
}
跑一下测试,可以看到输出结果如下:
YYYY-MM-dd = 2020-12-26
yyyy-MM-dd = 2020-12-26
========================
YYYY-MM-dd = 2021-12-27
yyyy-MM-dd = 2020-12-27
- 2020年12月26日(周六),两种格式化都正确
- 2020年12月27日(周日),
YYYY-MM-dd出了问题,年份到了2021年
本文首发于独立博客:http://blog.didispace.com/YYYY-MM-dd-2020-again/ ,更多技术干货欢迎收藏关注。
问题原因
为什么YYYY-MM-dd格式化2020年12月27日的时候,会到2021年呢?
因为YYYY是week-based-year,表示:当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。
所以2020年12月27日那天在这种表述方式下就已经到 2021 年了。
而当使用yyyy的时候,就还是 2020 年。
最后,自查一下你的程序是否有这样的问题吧!
欢迎关注我的公众号:程序猿DD,获得独家整理的免费学习资源助力你的Java学习之路!另每周赠书不停哦~
听说又有兄弟因为用YYYY-MM-dd被锤了...的更多相关文章
- Oracle中把一个DateTime的字符串转化成date类型。to_date('2016/12/8 18:55:43','yyyy/MM/dd hh24:mi:ss'),
Oracle中把一个DateTime或者该形态字符串转化成date类型. to_date('2016/12/8 18:55:43','yyyy/MM/dd hh24:mi:ss'), 或者: sele ...
- Excel日期格式单元格写成yyyy.MM.dd格式将无法读取到DataTable
最近在改公司的订单系统,遇到了一个奇怪的问题.C#程序需要从Excel文件中将数据全部读取到DataTable,其中Excel文件的第一列是日期格式yyyy/MM/dd,而这一列中大部分的单元格都是按 ...
- 让用户输入一个日期字符串,将其转换成日期格式, 格式是(yyyy/MM/dd,yyyyMMdd,yyyy-MM-dd)中的一种, 任何一种转换成功都可以; 如果所有的都无法转换,输出日期格式非法。
第三种方法 while(true) { Date d; System.out.println("正在进行第一次匹配,请稍后~—~"); ...
- 从客户端(ASPxFormLayout1$txtRule="<YYYY><MM><DD><XXXX>")中检测到有潜在危险的 Request.Form 值
在有文本框的值属于这种时<YYYY><MM><DD><XXXX>,会报这个错 在webconfig中加入 <httpRuntime request ...
- C# 时间格式 yyyy/mm/dd
今天遇到个问题在C#中将日期格式设置为yyyy/MM/dd,我是这样写的: DateTime.Now.ToString("yyyy/MM/dd"); 可是获取到的日期还是显示yyy ...
- DateTime.Now.ToString("yyyy/MM/dd") 输出的结果是 2006-03-16(转)
今天我在使用 DateTime.Now.ToString("yyyy/MM/dd") 输出的结果是 2006-03-16 而不是我想要的 2006/03/16,都快把我郁闷的不行了 ...
- JS 2019-12-03T15:53:23.000+08:00 转化为 YYYY MM DD
js时间格式转化 2019-12-03T15:53:23.000+08:00 转化为 YYYY MM DD var dateee = new Date(createTime).toJSON();var ...
- DateTime.Now.ToString("yyyy/MM/dd") 时间格式化中的MM为什么是大写的?
如果MM是小写,就表示时间里的分钟yyyy-MM-dd HH:mm:ss (年-月-日 时:分:秒) yyyy-MM-dd HH:mm:ss 年-月-日 时:分:秒大写是为了区分“月”与“分” 顺便说 ...
- 这里有个坑---js日期格式yyyy-MM-dd与yyyy/MM/dd
这里有个坑,---------每一个遇到的坑总结后都是一比财富. 我们写脚本的时候,一般定义一个日期格式会使用“2015-12-21”和“2015/12/21”两种数据格式,由于各取所需日期格式并没有 ...
- js 时间YYYY-MM-DD转换为YYYY/MM/DD 自定义函数格式
<script type="text/javascript"> window.onload = function () { va ...
随机推荐
- 痞子衡嵌入式:深入i.MXRT1050系列ROM中串行NOR Flash启动初始化流程
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是深入i.MXRT1050系列ROM中串行NOR Flash启动初始化流程. 从外部串行NOR Flash启动问题是i.MXRT系列开发最 ...
- linux离线安装docker + docker-compose
1 准备阶段(docker) 1.1 卸载旧版本 如果电脑上已经存在docker,需要先卸载可能存在的旧版本: 1. 删除某软件,及其安装时自动安装的所有包 sudo apt-get autoremo ...
- PyQt(Python+Qt)学习随笔:invisibleRootItem方法访问QTreeWidget树型部件的隐形根节点
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 我们知道在数据结构上来说,任何树都是有根节点的,但我们在QTreeWidget对象中并没有看到界面上 ...
- PostMan设置环境变量&全局变量
一.设置环境变量 1.点击右上角Manage Environment,进入环境变量设置界面 2.定义环境名称,参数名及参数值 3.将接口地址中服务器地址进行参数化,并选择对应的环境执行 二.设置全局变 ...
- 将一个数组转化为需要的格式,来自react官网的商品列表示例
//原来的格式 const PRODUCTS = [ { category: 'Sporting Goods', price: '$49.99', stocked: true, name: 'Foot ...
- 题解-JSOI2011 分特产
题面 JSOI2011 分特产 有 \(n\) 个不同的盒子和 \(m\) 种不同的球,第 \(i\) 种球有 \(a_i\) 个,用光所有球,求使每个盒子不空的方案数. 数据范围:\(1\le n, ...
- nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)
Mac上启动nginx报如上错误,原因是80端口已被占用,可能有些服务未能成功关闭. 解决:键入命令 sudo nginx -s stop ( 或 sudo nginx -s quit) ,然后 s ...
- css3动画帧
动画帧实现: css3使用steps来实现逐帧动画,动画过程中可能出现抖动,实乃精度偏差问题. 通常在动画里用到百分比单位时会出现抖动或位移现象,解决方法就是转换成具体的rem或px长度单位. 动画一 ...
- 数据结构,哈希表hash设计实验
数据结构实验,hash表 采用链地址法处理hash冲突 代码全部自己写,转载请留本文连接, 附上代码 #include<stdlib.h> #include<stdio.h> ...
- zstd c++ string 压缩&解压
zstd 简介 维基百科定义: Zstandard(或Zstd)是由Facebook的Yann Collet开发的一个无损数据压缩算法.该名称也指其C语言的参考实现.第1版的实现于2016年8月31日 ...