java中日期格式化的大坑
前言
我們都知道在java中進(jìn)行日期格式化使用simpledateformat。通過(guò)格式 yyyy-MM-dd 等來(lái)進(jìn)行格式化,但是你知道其中微小的坑嗎?
yyyy 和 YYYY
示例代碼
@Test public void testWeekBasedYear() { Calendar calendar = Calendar.getInstance(); // 2019-12-31 calendar.set(2019, Calendar.DECEMBER, 31); Date strDate1 = calendar.getTime(); // 2020-01-01 calendar.set(2020, Calendar.JANUARY, 1); Date strDate2 = calendar.getTime(); // 大寫 YYYY SimpleDateFormat formatYYYY = new SimpleDateFormat("YYYY/MM/dd"); System.out.println("2019-12-31 轉(zhuǎn) YYYY/MM/dd 格式: " + formatYYYY.format(strDate1)); System.out.println("2020-01-01 轉(zhuǎn) YYYY/MM/dd 格式: " + formatYYYY.format(strDate2)); // 小寫 YYYY SimpleDateFormat formatyyyy = new SimpleDateFormat("yyyy/MM/dd"); System.out.println("2019-12-31 轉(zhuǎn) yyyy/MM/dd 格式: " + formatyyyy.format(strDate1)); System.out.println("2020-01-01 轉(zhuǎn) yyyy/MM/dd 格式: " + formatyyyy.format(strDate2)); }
輸出的結(jié)果
2019-12-31 轉(zhuǎn) YYYY/MM/dd 格式: 2020/12/31
2020-01-01 轉(zhuǎn) YYYY/MM/dd 格式: 2020/01/01
2019-12-31 轉(zhuǎn) yyyy/MM/dd 格式: 2019/12/31
2020-01-01 轉(zhuǎn) yyyy/MM/dd 格式: 2020/01/01
2019變成2020了?
YYYY 是怎么做到的呢
Java's DateTimeFormatter pattern "YYYY" gives you the week-based-year, (by default, ISO-8601 standard) the year of the Thursday of that week.
下面就是用YYYY格式化代碼
12/29/2019 將會(huì)格式化到2019年 這一周還屬于2019年
12/30/2019 將會(huì)格式化到2020年 這一周已經(jīng)屬于2020年
看字說(shuō)話YYYY,week-based year 是 ISO 8601 規(guī)定的。
2019-12-31號(hào)這一天,按周算年份已經(jīng)屬于2020年了,格式化之后就變成2020年,后面的月份日期不變。
dd和DD
示例代碼
private static void tryit(int Y, int M, int D, String pat) { DateTimeFormatter fmt = DateTimeFormatter.ofPattern(pat); LocalDate dat = LocalDate.of(Y,M,D); String str = fmt.format(dat); System.out.printf("Y=%04d M=%02d D=%02d " + "formatted with " + "\"%s\" -> %s\n",Y,M,D,pat,str); } public static void main(String[] args){ tryit(2020,01,20,"MM/DD/YYYY"); tryit(2020,01,21,"DD/MM/YYYY"); tryit(2020,01,22,"YYYY-MM-DD"); tryit(2020,03,17,"MM/DD/YYYY"); tryit(2020,03,18,"DD/MM/YYYY"); tryit(2020,03,19,"YYYY-MM-DD"); }
輸出結(jié)果
Y=2020 M=01 D=20 formatted with "MM/DD/YYYY" -> 01/20/2020
Y=2020 M=01 D=21 formatted with "DD/MM/YYYY" -> 21/01/2020
Y=2020 M=01 D=22 formatted with "YYYY-MM-DD" -> 2020-01-22
Y=2020 M=03 D=17 formatted with "MM/DD/YYYY" -> 03/77/2020
Y=2020 M=03 D=18 formatted with "DD/MM/YYYY" -> 78/03/2020
Y=2020 M=03 D=19 formatted with "YYYY-MM-DD" -> 2020-03-79
這里的大寫的DD代表的是處于這一年中那一天,不是處于這個(gè)月的那一天,但是dd就沒(méi)有問(wèn)題。
結(jié)論
格式化日期一定要選用 yyyy-MM-dd哦!
到此這篇關(guān)于java中日期格式化的大坑的文章就介紹到這了,更多相關(guān)java 日期格式化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java日期格式化如何避免YYYY引發(fā)的時(shí)間異常
- Java技能點(diǎn)之SimpleDateFormat進(jìn)行日期格式化問(wèn)題
- java日期格式化YYYY-MM-dd遇坑指南小結(jié)
- Java中joda日期格式化工具的使用示例
- Golang中使用Date進(jìn)行日期格式化(沿用Java風(fēng)格)
- Java中日期格式化YYYY-DD的操作bug
- 與眾不同的 Java 日期格式化大全
- java日期格式化SimpleDateFormat的使用詳解
- java正則實(shí)現(xiàn)各種日期格式化
- Java日期格式化的實(shí)現(xiàn)(@JsonFormat和@JSONField)
相關(guān)文章
詳解Java?POI?excel自定義設(shè)置單元格格式
這篇文章主要介紹了Java?POI?excel設(shè)置單元格格式,自定義設(shè)置,設(shè)置單元格格式:來(lái)源_formats,更多數(shù)據(jù)類型從formats里面發(fā)現(xiàn),需要的朋友可以參考下2024-01-01shuffle的關(guān)鍵階段sort(Map端和Reduce端)源碼分析
今天小編就為大家分享一篇關(guān)于shuffle的關(guān)鍵階段sort(Map端和Reduce端)源碼分析,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01JDK自帶的序列化方式優(yōu)缺點(diǎn)及實(shí)現(xiàn)原理面試精講
這篇文章主要為大家介紹了JDK自帶的序列化方式優(yōu)缺點(diǎn)及實(shí)現(xiàn)原理面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10詳解Java實(shí)現(xiàn)多種方式的http數(shù)據(jù)抓取
本篇文章主要介紹了Java實(shí)現(xiàn)多種方式的http數(shù)據(jù)抓取,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。2016-12-12springboot獲取真實(shí)ip地址的方法實(shí)例
在使用springboot時(shí),需要獲取訪問(wèn)客戶端的IP地址,所以下面這篇文章主要給大家介紹了關(guān)于springboot獲取真實(shí)ip地址的相關(guān)資料,需要的朋友可以參考下2022-06-06