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