聽說用了YYYY-MM-dd的程序員,前些天都在加班改Bug
大叔我北漂十多年,一直沒有搖到北京的車牌,每周都需要通過一個(gè) APP 辦理“進(jìn)京證”,當(dāng)我辦理 19 年最后一次進(jìn)京證的時(shí)候,APP 給出了這樣的提示:
日期顯示:“2020-12-31”!
車友群里面立馬有人不淡定了,雖然大家都猜出來,這應(yīng)該是 APP 的 Bug,但還是難免要吐槽一下。
那么產(chǎn)生這個(gè) Bug 的原因是什么呢?其實(shí)很簡(jiǎn)單,就是 把 yyyy-MM-dd 寫成了 YYYY-MM-dd 。
如果對(duì)時(shí)間處理不那么熟悉的程序員看到這里,會(huì)認(rèn)為 yyyy 和 YYYY 有什么區(qū)別么?在代碼里面敲一下,他們的結(jié)果也都是相同的??!
public class DateTest { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); calendar.set(2019, Calendar.AUGUST, 31); Date strDate = calendar.getTime(); DateFormat formatUpperCase = new SimpleDateFormat("yyyy-MM-dd"); System.out.println("2019-08-31 to yyyy-MM-dd: " + formatUpperCase.format(strDate)); formatUpperCase = new SimpleDateFormat("YYYY-MM-dd"); System.out.println("2019-08-31 to YYYY-MM-dd: " + formatUpperCase.format(strDate)); } }
運(yùn)行結(jié)果為:
2019-08-31 to yyyy-MM-dd: 2019-08-31
2019-08-31 to YYYY-MM-dd: 2019-08-31
但是如果我們把日期改成 2019-12-31 再試試呢?結(jié)果產(chǎn)生了差異:
2019-12-31 to yyyy-MM-dd: 2019-12-31
2019-12-31 to YYYY-MM-dd: 2020-12-31
那么產(chǎn)生這個(gè)問題的原因是什么呢?其實(shí)很簡(jiǎn)單:Y 和 y 實(shí)際上代表了不同的含義
。
- y:year-of-era;正正經(jīng)經(jīng)的年;
- Y:week-based-year;只要本周跨年,那么這周就算入下一年;
這是開發(fā)過程中的一個(gè)小細(xì)節(jié),一不小心就掉到坑里了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js時(shí)間戳轉(zhuǎn)yyyy-MM-dd HH-mm-ss工具類詳解
- js實(shí)現(xiàn)把時(shí)間戳轉(zhuǎn)換為yyyy-MM-dd hh:mm 格式(es6語法)
- Javascript將字符串日期格式化為yyyy-mm-dd的方法
- 正則表達(dá)式實(shí)現(xiàn)將MM/DD/YYYY格式的日期轉(zhuǎn)換為YYYY-MM-DD格式
- js字符串日期yyyy-MM-dd轉(zhuǎn)化為date示例代碼
- JS驗(yàn)證日期的格式Y(jié)YYY-mm-dd 具體實(shí)現(xiàn)
- Winform之TextBox輸入日期格式驗(yàn)證yyyy-mm-dd
- 匹配yyyy-mm-dd日期格式的的正則表達(dá)式
相關(guān)文章
Java里得到00:00:00格式的時(shí)分秒的Timestamp
Java里如何得到00:00:00格式的時(shí)分秒的Timestamp ,下面是具體的實(shí)現(xiàn)代碼,需要的朋友可以參考下。2009-09-09Springboot錯(cuò)誤頁(yè)面和錯(cuò)誤信息定制操作
這篇文章主要介紹了Springboot錯(cuò)誤頁(yè)面和錯(cuò)誤信息定制操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10Spring Boot如何移除內(nèi)嵌Tomcat,使用非web方式啟動(dòng)
這篇文章主要介紹了Spring Boot如何移除內(nèi)嵌Tomcat,使用非web方式啟動(dòng),幫助大家更好的理解和學(xué)習(xí)使用spring boot框架,感興趣的朋友可以了解下2021-02-02Java獲取兩個(gè)集合List的交集、補(bǔ)集、并集(相加)和差集(相減)的不同方式
這篇文章主要給大家介紹了關(guān)于Java獲取兩個(gè)集合List的交集、補(bǔ)集、并集(相加)和差集(相減)的不同方式,在一般操作中對(duì)于list集合取交集、差集、并集,比較簡(jiǎn)單,需要的朋友可以參考下2023-08-08用StopWatch優(yōu)雅替代currentTimeMillis計(jì)算程序執(zhí)行耗時(shí)
別再用System.currentTimeMillis()計(jì)算程序執(zhí)行耗時(shí)了,擁抱StopWatch優(yōu)雅來優(yōu)雅的計(jì)算,代碼更簡(jiǎn)潔效率更高,本文帶你了解StopWatch的使用2021-09-09Java中的任務(wù)調(diào)度框架quartz詳細(xì)解析
這篇文章主要介紹了Java中的任務(wù)調(diào)度框架quartz詳細(xì)解析,Quartz 是一個(gè)完全由 Java 編寫的開源作業(yè)調(diào)度框架,為在 Java 應(yīng)用程序中進(jìn)行作業(yè)調(diào)度提供了簡(jiǎn)單卻強(qiáng)大的機(jī)制,需要的朋友可以參考下2023-11-11mybatis插件實(shí)現(xiàn)自定義改寫表名實(shí)例代碼
在數(shù)據(jù)庫(kù)操作過程中,經(jīng)常有修改表名的需求,下面這篇文章主要給大家介紹了關(guān)于mybatis插件實(shí)現(xiàn)自定義改寫表名的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04SpringBoot整合Swagger和Actuator的使用教程詳解
Swagger 是一套基于 OpenAPI 規(guī)范構(gòu)建的開源工具,可以幫助我們?cè)O(shè)計(jì)、構(gòu)建、記錄以及使用 Rest API。本篇文章主要介紹的是SpringBoot整合Swagger(API文檔生成框架)和SpringBoot整合Actuator(項(xiàng)目監(jiān)控)使用教程。感興趣的朋友一起看看吧2019-06-06