Java中YYYY-MM-dd與yyyy-MM-dd的區(qū)別及跨年問題
大寫YYYY的用途
大寫的YYYY
通常用于表示“周年”,在某些編程語言或者數(shù)據(jù)格式中,比如ISO 8601日期格式中,YYYY
可能代表的是所在周屬于的年份。這意味著,如果一周跨越了兩個不同的年份,該周會被歸屬到哪一年取決于這周中的大部分日子屬于哪一年。
小寫yyyy的用途
小寫的yyyy
則是更常見的表示方法,用于表示“日歷年”。無論日期所在的周是否跨年,yyyy
總是代表實際的年份。
實際影響
在大多數(shù)情況下,人們使用yyyy-MM-dd
格式,因為它符合日常生活中對日期的理解和使用。而在一些需要按周計算時間的場合,可能會用到YYYY
格式,尤其是在財務(wù)報告或者具有特定周計算需求的行業(yè)中。
樣例
public class DateFormatExample { public static void main(String[] args) { // 使用Calendar獲取一個日期實例 Calendar calendar = Calendar.getInstance(); // 假設(shè)日期是2023年12月31日 calendar.set(2023, Calendar.DECEMBER, 31); // 使用YYYY格式化日期 SimpleDateFormat formatWithYYYY = new SimpleDateFormat("YYYY-MM-dd"); String dateWithYYYY = formatWithYYYY.format(calendar.getTime()); System.out.println("Date with YYYY: " + dateWithYYYY); // 輸出的是2024-12-31,因為12月31日屬于第1周,而該周屬于下一年 // 使用yyyy格式化日期 SimpleDateFormat formatWithyyyy = new SimpleDateFormat("yyyy-MM-dd"); String dateWithyyyy = formatWithyyyy.format(calendar.getTime()); System.out.println("Date with yyyy: " + dateWithyyyy); // 輸出2023-12-31 } }
結(jié)論
YYYY-MM-dd
可能會導(dǎo)致跨年周的日期被歸屬到錯誤的年份。yyyy-MM-dd
總是表示實際的日歷年份,無論日期所在的周是否跨年。- 在編寫代碼或者設(shè)置日期格式時,需要根據(jù)實際需求選擇合適的年份表示方法。
如果使用日期格式不當,可能會在數(shù)據(jù)處理、日志記錄或者時間計算等方面造成混淆和錯誤。因此,在處理日期和時間時,了解并正確使用這些日期格式是非常重要的。
補充
常用格式為:yyyy-MM-dd HH:mm:ss
以 2019-12-31 06:07:59:666 時間為例:
字符 | 含義 | Example |
y(小寫的y) | 年 | yyyy---->2019 |
M(大寫的M) | 月 | MM---->12 |
d(小寫的d) | 一月中的天數(shù) | dd---->31 |
H(24 小時制,大寫的H) | 小時(0-23) | HH---->18 |
h(12 小時制,小寫的h) | 小時(1-12) | hh---->06 |
m(小寫的m) | 分 | mm---->07 |
s(小寫的s) | 秒 | ss---->59 |
S(大寫的S) | 毫秒 | SSS---->666 |
Y(大寫的y) | Week Year | YYYY---->2020 |
D(大寫的D) | 一年中天數(shù) | DD---->365 |
yyyy-MM-dd與YYYY-MM-dd區(qū)別在哪里?
Y 代表 Week Year,表示當天周所在的年份。這種方式將會把一年劃分成52 周/53周(類似于閏年的概念,每隔幾年將會增加一周)。Week Year下每周僅屬于某一年,如果某年的第一周或最后一周跨年,就會導(dǎo)致部分日期年份與實際不符。
oracle和java的日期格式的差異
java中的的日期格式為:
yyyy-MM-dd HH:mm:ss:代表將時間轉(zhuǎn)換為24小時制,例: 2020-01-07 13:21:55
yyyy-MM-dd hh:mm:ss:代表將時間轉(zhuǎn)換為12小時制,例: 2020-01-07 03:24:21
oracle中的日期格式為(不區(qū)分大小寫):
yyyy-MM-dd HH24:mi:ss:代表oracle中的24小時制,例:2020/1/7 13:21:55
yyyy-MM-dd HH:mi:ss: 代表oracle中的12小時制,例:2020/1/7 9:21:55
之所以 oracle和java不同,是因為我們知道oracle是不區(qū)分大小寫的,所以java中根據(jù)大小寫來代表24小時和12小時的表達式在oracle中就會出問題,oracle中將24小時的時和分做了特殊處理.如上所示,在hh后面加上了24,將mm改為了mi.
到此這篇關(guān)于Java中YYYY-MM-dd與yyyy-MM-dd的區(qū)別及跨年問題的文章就介紹到這了,更多相關(guān)Java YYYY-MM-dd與yyyy-MM-dd內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Windows安裝兩個或多個JDK并實現(xiàn)自由切換的方法
最近新接手一個項目,啟動的時候,發(fā)現(xiàn)有些jar和現(xiàn)在正在使用的JDK版本不一致,一直啟動有問題,想著就多裝一個JDK,由于為了保證java的運行環(huán)境和編譯環(huán)境保持一致,就需要我們設(shè)置jdk的環(huán)境變量,所以本文給大家介紹了Windows安裝兩個或多個JDK并實現(xiàn)自由切換的方法2025-03-03使用SpringBoot中的Schedule定時發(fā)送郵件的方法
在SpringBoot中,你可以使用@Scheduled注解來創(chuàng)建定時任務(wù),@Scheduled注解可以應(yīng)用于方法上,表示這個方法是一個定時任務(wù),可以根據(jù)指定的時間間隔或固定時間執(zhí)行,本文就給大家介紹一下如何使用SpringBoot中的Schedule定時發(fā)送郵件,需要的朋友可以參考下2023-08-08org.springframework.beans.BeanInstantiationException異常解決
本文主要介紹了org.springframework.beans.BeanInstantiationException異常解決,大多數(shù)情況下,這個異常是由于簡單的配置錯誤或者代碼問題導(dǎo)致的,下面就來具體解決一下2024-03-03prometheus監(jiān)控springboot應(yīng)用簡單使用介紹詳解
這篇文章主要介紹了prometheus監(jiān)控springboot應(yīng)用簡單使用介紹詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05Springboot基于enable模塊驅(qū)動的實現(xiàn)
這篇文章主要介紹了Springboot基于enable模塊驅(qū)動的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08SpringFramework中的數(shù)據(jù)校驗方式
這篇文章主要介紹了SpringFramework中的數(shù)據(jù)校驗方式,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-12-12