java 日期格式化为yyyy-mm-dd_几年前的项目用了YYYYMMdd,跨年夜老板喊我回去改Bug...

昨天听一粉丝讲到自己的项目中因为格式化时间用到了"YYYY-MM-dd",元旦当天被喊回去改Bug,到底是怎么回事哪?

这是开发过程中的一个小细节,一不小心就掉到坑里了。

我们先看一下什么情况!

b4fc5a315838c974f9bccaac7e7a1d60.png

14fea790cba66b7c9d2c5ada4f100002.png

2bb246c3976c2dd5fc508877548292cf.png

那么产生这个 Bug 的原因是什么呢?其实很简单,就是把 yyyy-MM-dd 写成了 YYYY-MM-dd 。

如果对时间处理不那么熟悉的程序员看到这里,会认为 yyyy 和 YYYY 有什么区别么?在代码里面敲一下,他们的结果也都是相同的啊!

5cf6ddd99a8c6e1eeec4f271014300fb.png

运行结果为:

75486b97e7bc09908dff1e3e25f90f17.png

但是如果我们把日期改成 2019-12-31 再试试呢?结果产生了差异:

ef1a4ba04f29c6a15e46a6ccdd5665bf.png

那么产生这个问题的原因是什么呢?其实很简单:Y 和 y 实际上代表了不同的含义。

2c6c3bdcce120addc755b0c68eb1a09a.png

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

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

可以看出来使用"YYYY-MM-DD"格式化时间出现了错误!

具体是什么原因哪?

这是因为Java语言中在特定的时间或者数字等数据上,平时你感觉一切都OK!但是在特定时间、特定环境就会出问题的情况!刚好格式化时间就算其中的一个!

2020年跨年的时候刚好是2019和2020交换的时候,于是就出现了格式化时间的问题,归其原因就是使用了"YYYY-MM-dd"格式化时间!

YYYY 是 week-based-year,现在就已经 2020 年了,yyyy 还是 2019 年!

Java自己的BUG,还向圣经一样让人又记又背的! [笑cry]

开发中还是用yyyy-MM-dd来做日期格式化,其它的就不要用了!

————  e n d ————

快年底了,师长为大家准备了三份面试宝典:

《java面试宝典5.0》

《350道Java面试题:整理自100+公司》

《资深java面试宝典-视频版》

分别适用于初中级,中高级,以及资深级工程师的面试复习。

内容包含java基础、javaweb、各个性能优化、JVM、锁、高并发、反射、Spring原理、微服务、Zookeeper、数据库、数据结构、限流熔断降级等等。

7b656d0fc69e212f914216d117eabd40.png

获取方式:点“在看”,V信关注师长的小号:编程最前线并回复 面试 领取,更多精彩陆续奉上。

一、初中级《java面试宝典5.0》,对标8-13K

0fccd017a6f64a7ef672f812b5f0228a.png

二、中高级《350道Java面试题:整理自100+公司》,对标12-20K

3df72d109aff2bc21d484c0a5e1beb60.png

三、资深《java面试突击-视频版》,对标20K+

c1c34abb76c205afe42ee05e0448593b.png

dfdf81a8f87c9e66faef2df4cd8a314e.gif

在看好不好,喵~ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值