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钪袑θ掌诘睦斫夂褪褂?。而在一些需要按周?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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IntelliJ IDEA代碼縮進(jìn)與Tab設(shè)置的操作指南
在軟件開發(fā)中,代碼風(fēng)格的統(tǒng)一性直接影響團(tuán)隊(duì)協(xié)作效率與代碼可讀性,IntelliJ IDEA 作為主流 Java 開發(fā)工具,提供了高度靈活的 Tabs and Indents 設(shè)置,允許開發(fā)者根據(jù)團(tuán)隊(duì)規(guī)范或個(gè)人偏好自定義縮進(jìn)行為,本文給大家介紹了IntelliJ IDEA代碼縮進(jìn)與Tab設(shè)置的操作指南2025-05-05
多個(gè)springboot項(xiàng)目如何使用一個(gè)外部共同的application.yml
這篇文章主要介紹了多個(gè)springboot項(xiàng)目如何使用一個(gè)外部共同的application.yml問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Java實(shí)現(xiàn)微信公眾號(hào)自定義菜單的創(chuàng)建方法示例
這篇文章主要介紹了Java實(shí)現(xiàn)微信公眾號(hào)自定義菜單的創(chuàng)建方法,結(jié)合實(shí)例形式分析了java創(chuàng)建微信公眾號(hào)自定義菜單的具體步驟、實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-10-10
Java生成的隨機(jī)數(shù)靠譜嗎?多少次會(huì)重復(fù)?
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識(shí),文章圍繞著Java生成的隨機(jī)數(shù)靠不靠譜展開,文中有非常詳細(xì)的介紹,需要的朋友可以參考下2021-06-06
SpringBoot靜態(tài)資源映射,圖片無法實(shí)時(shí)訪問問題及解決
文章介紹了Spring Boot中靜態(tài)資源映射配置,解決了圖片上傳后無法實(shí)時(shí)訪問的問題,通過配置虛擬路徑,將訪問路徑映射到指定的物理路徑,解決了圖片無法實(shí)時(shí)顯示的問題2025-02-02
Spring Boot 整合 SSE的高級(jí)實(shí)踐(Server-Sent Even
SSE(Server-Sent Events)是一種基于HTTP協(xié)議的單向通信機(jī)制,允許服務(wù)器向?yàn)g覽器持續(xù)發(fā)送實(shí)時(shí)更新,這篇文章主要介紹了Spring Boot 整合 SSE的高級(jí)實(shí)踐(Server-Sent Events),需要的朋友可以參考下2025-04-04

