最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java利用LocalDate進(jìn)行日期處理的完全指南

 更新時(shí)間:2025年03月06日 11:25:41   作者:DebugYourCareer  
這篇文章主要為大家詳細(xì)介紹了Java利用LocalDate進(jìn)行日期處理的詳細(xì)教程,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、為什么說(shuō)Date已經(jīng)過(guò)時(shí)?

在Java 8之前,我們一直在使用java.util.Datejava.util.Calendar處理日期時(shí)間,但這些類存在諸多設(shè)計(jì)缺陷:

// 反人類設(shè)計(jì)的經(jīng)典示例
Date date = new Date(122, 10, 21); 
// 實(shí)際表示:2022年11月21日(年份基準(zhǔn)是1900,月份從0開(kāi)始)

二、LocalDate核心特性解析

1. 創(chuàng)建日期對(duì)象

// 獲取當(dāng)前日期(無(wú)時(shí)區(qū)概念,基于系統(tǒng)時(shí)鐘)
LocalDate today = LocalDate.now(); 

// 指定具體日期(月份使用枚舉,避免數(shù)值歧義)
LocalDate nationalDay = LocalDate.of(2023, Month.OCTOBER, 1);

// 解析標(biāo)準(zhǔn)ISO格式字符串(yyyy-MM-dd)
LocalDate parsedDate = LocalDate.parse("2023-08-15");

2. 日期格式化與解析

// 創(chuàng)建線程安全的格式化器(推薦重用實(shí)例)
DateTimeFormatter formatter = DateTimeFormatter
    .ofPattern("yyyy年MM月dd日") // 定義格式模板
    .withLocale(Locale.CHINA);    // 指定地區(qū)設(shè)置

// 格式化日期對(duì)象 → 字符串
String formatted = nationalDay.format(formatter); // 輸出:"2023年10月01日"

// 解析字符串 → 日期對(duì)象
LocalDate date = LocalDate.parse("2023年10月01日", formatter);

3. 日期計(jì)算(鏈?zhǔn)紸PI)

// 基礎(chǔ)計(jì)算(返回新對(duì)象,原對(duì)象不變)
LocalDate tomorrow = today.plusDays(1);      // 加1天
LocalDate prevMonth = today.minusMonths(1);  // 減1個(gè)月

// 使用時(shí)間調(diào)節(jié)器(TemporalAdjusters)
LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
LocalDate nextMonday = today.with(TemporalAdjusters.next(DayOfWeek.MONDAY));

4. 日期比較與信息獲取

// 比較日期先后
boolean isAfter = today.isAfter(nationalDay); 

// 判斷閏年(基于ISO日歷系統(tǒng))
boolean isLeapYear = today.isLeapYear(); 

// 獲取星期枚舉(Monday-Sunday)
DayOfWeek dayOfWeek = today.getDayOfWeek(); 

5. 時(shí)間段計(jì)算(Period類)

// 計(jì)算兩個(gè)日期之間的差值
LocalDate start = LocalDate.of(2023, 1, 1);
LocalDate end = LocalDate.of(2023, 12, 31);
Period period = Period.between(start, end);

// 格式化輸出時(shí)間段
System.out.printf("相差:%d年%d個(gè)月%d天",
    period.getYears(),   // 年差
    period.getMonths(), // 月差
    period.getDays());   // 日差

三、與Date的互操作

1. LocalDate → Date(需指定時(shí)間)

// 轉(zhuǎn)換為當(dāng)天的零點(diǎn)時(shí)刻(系統(tǒng)默認(rèn)時(shí)區(qū))
ZonedDateTime zdt = today.atStartOfDay(ZoneId.systemDefault());
Date oldDate = Date.from(zdt.toInstant());

2. Date → LocalDate(時(shí)區(qū)敏感)

Date date = new Date();
// 轉(zhuǎn)換步驟:Date → Instant → ZonedDateTime → LocalDate
LocalDate localDate = date.toInstant()       // 轉(zhuǎn)為時(shí)間戳
    .atZone(ZoneId.systemDefault()) // 附加時(shí)區(qū)信息
    .toLocalDate();                 // 提取日期部分

四、最佳實(shí)踐與常見(jiàn)問(wèn)題

1. 時(shí)區(qū)處理原則

場(chǎng)景推薦類說(shuō)明
生日、紀(jì)念日LocalDate無(wú)時(shí)區(qū)概念
跨時(shí)區(qū)會(huì)議時(shí)間ZonedDateTime明確時(shí)區(qū)信息
服務(wù)器日志時(shí)間Instant時(shí)間戳,絕對(duì)時(shí)間

2. 數(shù)據(jù)庫(kù)交互(JPA示例)

@Entity
public class User {
    @Column(name = "birth_date")
    private LocalDate birthDate; // 直接映射為DATE類型
    
    @Column(name = "create_time")
    private LocalDateTime createTime; // 映射為T(mén)IMESTAMP
}

3. 日期格式模式符速查表

符號(hào)說(shuō)明示例
y年份2023
M月份7 (數(shù)字) / July (文本)
d日期5
E星期星期一 / Mon
Q季度Q3

五、為什么推薦LocalDate?

  • 線程安全:所有對(duì)象不可變,無(wú)需擔(dān)心并發(fā)修改

  • 清晰API:方法名自解釋(如plusDays() vs Calendar.add()

  • 精確類型

    • LocalDate:2023-08-15
    • LocalTime:14:30:00
    • LocalDateTime:2023-08-15T14:30
  • ISO標(biāo)準(zhǔn):默認(rèn)遵循ISO-8601,避免格式歧義

六、遷移路線圖(圖示建議)

七、常見(jiàn)問(wèn)題解答

Q:如何處理農(nóng)歷日期?

// 使用三方庫(kù)如LunarDate
LunarDate lunarDate = LunarDate.fromSolar(2023, 8, 15);
LocalDate solarDate = lunarDate.toSolar();

Q:如何計(jì)算兩個(gè)日期間的工作日?

long workDays = start.datesUntil(end)
    .filter(date -> date.getDayOfWeek().getValue() < 6)
    .count();

以上就是Java利用LocalDate進(jìn)行日期處理的完全指南的詳細(xì)內(nèi)容,更多關(guān)于Java LocalDate日期處理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用SpringBoot配置虛擬化路徑用于圖片的展示

    使用SpringBoot配置虛擬化路徑用于圖片的展示

    這篇文章主要介紹了使用SpringBoot配置虛擬化路徑用于圖片的展示方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • MyBatis-Plus 如何單元測(cè)試的實(shí)現(xiàn)

    MyBatis-Plus 如何單元測(cè)試的實(shí)現(xiàn)

    這篇文章主要介紹了MyBatis-Plus 如何單元測(cè)試的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Spring手寫(xiě)簡(jiǎn)化版MVC流程詳解

    Spring手寫(xiě)簡(jiǎn)化版MVC流程詳解

    Spring MVC是Spring Framework的一部分,是基于Java實(shí)現(xiàn)MVC的輕量級(jí)Web框架。本文將通過(guò)簡(jiǎn)單示例帶大家掌握SpringMVC簡(jiǎn)化版手寫(xiě)方法,感興趣的可以了解一下
    2022-11-11
  • java 判斷兩個(gè)時(shí)間段是否重疊的案例

    java 判斷兩個(gè)時(shí)間段是否重疊的案例

    這篇文章主要介紹了java 判斷兩個(gè)時(shí)間段是否重疊的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • 用Java產(chǎn)生100個(gè)1-150間不重復(fù)數(shù)字

    用Java產(chǎn)生100個(gè)1-150間不重復(fù)數(shù)字

    這篇文章主要介紹了用Java產(chǎn)生100個(gè)1-150間不重復(fù)數(shù)字,需要的朋友可以參考下
    2017-02-02
  • Spring Aop基本流程原理示例詳解

    Spring Aop基本流程原理示例詳解

    這篇文章主要給大家介紹了關(guān)于Spring Aop基本流程原理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java log4j詳細(xì)教程

    Java log4j詳細(xì)教程

    日志是應(yīng)用軟件中不可缺少的部分,Apache的開(kāi)源項(xiàng)目log4j是一個(gè)功能強(qiáng)大的日志組件,提供方便的日志記錄。在apache網(wǎng)站:jakarta.apache.org/log4j 可以免費(fèi)下載到Log4j最新版本的軟件包
    2015-11-11
  • Java中將一個(gè)列表拆分為多個(gè)較小列表的三種不同方法

    Java中將一個(gè)列表拆分為多個(gè)較小列表的三種不同方法

    有時(shí)候我們需要將大集合按指定的數(shù)量分割成若干個(gè)小集合,這篇文章主要給大家介紹了關(guān)于Java中將一個(gè)列表拆分為多個(gè)較小列表的三種不同方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • MyBatis將查詢出的兩列數(shù)據(jù)裝配成鍵值對(duì)的操作方法

    MyBatis將查詢出的兩列數(shù)據(jù)裝配成鍵值對(duì)的操作方法

    這篇文章主要介紹了MyBatis將查詢出的兩列數(shù)據(jù)裝配成鍵值對(duì)的操作代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • Java使用POI實(shí)現(xiàn)Excel文件的創(chuàng)建與處理

    Java使用POI實(shí)現(xiàn)Excel文件的創(chuàng)建與處理

    這篇文章主要為大家詳細(xì)介紹了Java如何采用POI原生方式實(shí)現(xiàn)自定義Excel表格表頭并生成Excel文件,文中的示例代碼講解詳細(xì),有需要的小伙伴可以了解下
    2025-05-05

最新評(píng)論

西盟| 永福县| 高陵县| 大余县| 宽城| 青铜峡市| 阜城县| 奉贤区| 万荣县| 余姚市| 兴安盟| 马关县| 大埔县| 原阳县| 张家港市| 遵化市| 石屏县| 新干县| 南通市| 社会| 阿坝县| 沅陵县| 新巴尔虎左旗| 罗江县| 凤台县| 惠水县| 乌拉特中旗| 武安市| 水城县| 呼伦贝尔市| 瓮安县| 出国| 项城市| 环江| 明溪县| 岗巴县| 射阳县| 贵州省| 柯坪县| 桂阳县| 绵阳市|