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();
// 大寫(xiě) 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));
// 小寫(xiě) 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
這里的大寫(xiě)的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)文章
使用SpringBoot與Thrift實(shí)現(xiàn)RPC通信的方式詳解
在微服務(wù)架構(gòu)的世界里,服務(wù)間的通信機(jī)制選擇成為了關(guān)鍵決策之一,RPC因其簡(jiǎn)潔、高效的特點(diǎn)備受青睞,本文將詳細(xì)探討如何利用Spring?Boot和Thrift框架構(gòu)建RPC通信,讓讀者理解其內(nèi)在原理及實(shí)現(xiàn)方式,需要的朋友可以參考下2023-10-10
Java深入了解數(shù)據(jù)結(jié)構(gòu)之哈希表篇
哈希表是一種根據(jù)關(guān)鍵碼去尋找值的數(shù)據(jù)映射結(jié)構(gòu),該結(jié)構(gòu)通過(guò)把關(guān)鍵碼映射的位置去尋找存放值的地方,說(shuō)起來(lái)可能感覺(jué)有點(diǎn)復(fù)雜,我想我舉個(gè)例子你就會(huì)明白了,最典型的的例子就是字典2022-01-01
Mybatis-Plus Wrapper條件構(gòu)造器超詳細(xì)使用教程
接口方法的參數(shù)中,會(huì)出現(xiàn)各種 Wrapper,比如 queryWrapper、updateWrapper 等。Wrapper 的作用就是用于定義各種各樣的條件(where)。所以不管是查詢、更新、刪除都會(huì)用到Wrapper2022-03-03
Java?精煉解讀數(shù)據(jù)結(jié)構(gòu)的鏈表的概念與實(shí)現(xiàn)
鏈表是一種物理存儲(chǔ)單元上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過(guò)鏈表中的指針連接次序?qū)崿F(xiàn)的,每一個(gè)鏈表都包含多個(gè)節(jié)點(diǎn),節(jié)點(diǎn)又包含兩個(gè)部分,一個(gè)是數(shù)據(jù)域,一個(gè)是引用域2022-03-03
SpringBoot整合Mybatis-Plus分頁(yè)失效的解決
本文主要介紹了SpringBoot整合Mybatis-Plus分頁(yè)失效的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
Java8 LocalDateTime極簡(jiǎn)時(shí)間日期操作小結(jié)
這篇文章主要介紹了Java8-LocalDateTime極簡(jiǎn)時(shí)間日期操作整理,通過(guò)實(shí)例代碼給大家介紹了java8 LocalDateTime 格式化問(wèn)題,需要的朋友可以參考下2020-04-04
SpringBoot定制三種錯(cuò)誤頁(yè)面及錯(cuò)誤數(shù)據(jù)方法示例
Spring Boot提供的默認(rèn)異常處理機(jī)制通常并不一定適合我們實(shí)際的業(yè)務(wù)場(chǎng)景,因此,我們通常會(huì)根據(jù)自身的需要對(duì)Spring Boot全局異常進(jìn)行統(tǒng)一定制,例如定制錯(cuò)誤頁(yè)面,定制錯(cuò)誤數(shù)據(jù)等。本文主要介紹了SpringBoot三種自定義錯(cuò)誤頁(yè)面的實(shí)現(xiàn),快來(lái)學(xué)習(xí)吧2021-12-12

