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

一文帶你搞懂Java8的LocalDateTime

 更新時間:2023年04月06日 09:05:57   作者:Java技術指北  
LocalDateTime?是Java8中新加入的日期時間類,現在都?Java20?了,不會還有人沒用過?LocalDateTime?吧?今天給大家演示一下?LocalDateTime?的常用方法

前言

LocalDateTime、LocalDate、LocalTime 是 Java8 全新的日期框架,加強了對時間的管理,有很多特別好用的時間運算方法,而且是線程安全的,較之前的 util.Date 以及 Calander 使用起來更加的方便直觀,下面介紹幾種常見的日期對象用法。

  • LocalDateTime:日期加時間的日期對象,包含年月日時分秒
  • LocalDate:日期類,包含年月日
  • LocalTime:時間類,包含時分秒

LocalDateTime

獲取當前時間

@Test
public?void?test()?{
????LocalDate?localDate?=?LocalDate.now();
????LocalTime?localTime?=?LocalTime.now();
????LocalDateTime?localDateTime?=?LocalDateTime.now();
????System.out.println("localDate:"+localDate);//2023-02-22
????System.out.println("localTime:"+localTime);//17:25:36.590
????System.out.println("localDateTime:"+localDateTime);//2023-02-22T17:25:36.590
}

輸出結果:

圖片

可以看到不用做格式轉換就可以得到可讀性很高的日期格式。注意:ISO 8601規(guī)定的日期和時間分隔符是T。標準格式如下:

  • 日期:yyyy-MM-dd
  • 時間:HH:mm:ss
  • 帶毫秒的時間:HH:mm:ss.SSS
  • 日期和時間:yyyy-MM-dd'T'HH:mm:ss
  • 帶毫秒的日期和時間:yyyy-MM-dd'T'HH:mm:ss.SSS

獲取當前時間的年月日時分秒

@Test
public?void?test()?{
????LocalDateTime?localDateTime?=?LocalDateTime.now();?//?獲取當前時間
????int?year?=?localDateTime.getYear();?//?獲取年份?2023
????int?month?=?localDateTime.getMonthValue();?//?獲取月份?2
????int?day?=?localDateTime.getDayOfMonth();?//?獲取月中的天數?22
????int?hour?=?localDateTime.getHour();?//?獲取當前的小時?17
????int?minute?=?localDateTime.getMinute();?//?獲取當前分鐘?33
????int?second?=?localDateTime.getSecond();?//?獲取當前秒數?22
????System.out.println(year);
????System.out.println(month);
????System.out.println(day);
????System.out.println(hour);
????System.out.println(minute);
????System.out.println(second);
}

輸出結果:

給LocalDateTime賦值

在static目錄中新建kaptcha.html頁面,代碼如下:

public?void?test()?{
????LocalDateTime?of?=?LocalDateTime.of(2023,2,22,22,22,22);
????System.out.println(of);?//?輸出2023-02-22T22:22:22
}

時間與字符串相互轉換

@Test
public?void?test()?{
????//?將字符串轉換為指定格式的時間(格式要和給定的格式一致,不然會報錯)
????LocalDateTime?parse?=?LocalDateTime.parse("2023-02-22?22:22:22",?DateTimeFormatter.ofPattern("yyyy-MM-dd?HH:mm:ss"));
????LocalDateTime?parse1?=?LocalDateTime.parse("2023?02?22?22:22:22",?DateTimeFormatter.ofPattern("yyyy?MM?dd?HH:mm:ss"));
????LocalDateTime?parse2?=?LocalDateTime.parse("2023.02.22?22:22:22",?DateTimeFormatter.ofPattern("yyyy.MM.dd?HH:mm:ss"));
????System.out.println(parse);?//?輸出2023-02-22T22:22:22
????System.out.println(parse1);?//?輸出2023-02-22T22:22:22
????System.out.println(parse2);?//?輸出2023-02-22T22:22:22
????//?時間轉字符串
????LocalDateTime?now?=?LocalDateTime.now();
????DateTimeFormatter?of?=?DateTimeFormatter.ofPattern("yyyy-MM-dd?HH:mm:ss");
????String?dateTime?=?now.format(of);
????System.out.println(dateTime);?//?輸出?2023-02-22?17:56:18
}

輸出結果:

時間運算:加上對應時間

LocalDateTime提供了對日期和時間進行加減的非常簡單的鏈式調用,讓時間運算變得非常簡單:

@Test
public?void?test()?{
????LocalDateTime?now?=?LocalDateTime.now();?//?當前時間2023-02-22T18:00:19.352
????LocalDateTime?plusYears=?now.plusYears(2);?//?在當前時間加上2年2025-02-22T18:00:19.352
????LocalDateTime?plusMonths=?now.plusMonths(2);//?在當前時間商加上2月2023-04-22T18:00:19.352
????LocalDateTime?plusDays=?now.plusDays(2);?//?在當前時間加上2天2023-02-24T18:00:19.352
????LocalDateTime?plusHours=?now.plusHours(2);?//?在當前時間加上2個小時2023-02-22T20:00:19.352
????LocalDateTime?plusMinutes=?now.plusMinutes(30);?//?在當前時間加上30分鐘2023-02-22T18:30:19.352
????LocalDateTime?plusSeconds?=?now.plusSeconds(30);?//?在當前時間加上30秒2023-02-22T18:00:49.352
????System.out.println(now);
????System.out.println(plusYears);
????System.out.println(plusMonths);
????System.out.println(plusDays);
????System.out.println(plusHours);
????System.out.println(plusMinutes);
????System.out.println(plusSeconds);
}

輸出結果:

時間運算:減去對應時間

@Test
public?void?test()?{
????LocalDateTime?now?=?LocalDateTime.now();?//?當前時間
????LocalDateTime?minusYears?=?now.minusYears(2);?//?在當前時間減上2年
????LocalDateTime?minusMonths?=?now.minusMonths(2);//?在當前時間商減上2月
????LocalDateTime?minusDays?=?now.minusDays(2);?//?在當前時間減上2天
????LocalDateTime?minusHours?=?now.minusHours(2);?//?在當前時間減上2個小時
????LocalDateTime?minusMinutes?=?now.minusMinutes(30);?//?在當前時間減上30分鐘
????LocalDateTime?minusSeconds?=?now.minusSeconds(30);?//?在當前時間減上30秒
????System.out.println("now:"?+?now);
????System.out.println("minusYears:"?+?minusYears);
????System.out.println("minusMonths:"?+?minusMonths);
????System.out.println("minusDays:"?+?minusDays);
????System.out.println("minusHours:"?+?minusHours);
????System.out.println("minusMinutes:"?+?minusMinutes);
????System.out.println("minusSeconds:"?+?minusSeconds);
}

輸出結果:

兩個時間比較

@Test
public?void?test()?{
????LocalDateTime?now?=?LocalDateTime.now();?//?當前時間
????LocalDateTime?now1?=?now.plusYears(5);?//?在當前時間加上5年
????//??給LocalDateTime?賦值
????LocalDateTime?of?=?LocalDateTime.of(2023,2,2,22,22,22);
????LocalDateTime?of1?=?LocalDateTime.of(2023,8,5,1,1,1);
????//兩個時間作比較,第一個時間減去第二個時間(如果年份相同,比較月份,月份相同比較天數,以此類推)
????int?compareTo?=?now1.compareTo(now);
????int?compareTo1?=?now.compareTo(now1);
????int?compareTo2?=?now.compareTo(of);
????int?compareTo3?=?now.compareTo(of1);
????System.out.println(now);???//?輸出?2023-02-22T20:19:44.112v
????System.out.println(now1);?//?輸出?2028-02-22T20:19:44.112
????System.out.println(of);?//?輸出?2023-02-02T22:22:22
????System.out.println(of1);?//?輸出?2023-08-05T01:01:01
????System.out.println(compareTo);?//?輸出?5
????System.out.println(compareTo1);?//?輸出?-5
????System.out.println(compareTo2);?//?輸出?20
????System.out.println(compareTo3);?//?輸出?-6
}

輸出結果:

利用Duration計算時間差

注意沒有計算相差的年和秒值,對于要計算相差的秒數,可以利用計算毫秒來進行轉換

@Test
public?void?test()?{
????LocalDateTime?now?=?LocalDateTime.now();?//?當前時間
????//??給LocalDateTime?賦值
????LocalDateTime?of?=?LocalDateTime.of(2022,2,22,2,2,2);
????Duration?duration?=?Duration.between(of,now);?//?后面減去前面
????long?toDays?=?Duration.between(of,now).toDays();?//相差的天數
????long?toHours?=?Duration.between(of,now).toHours();//相差的小時數
????long?toMinutes?=?Duration.between(of,now).toMinutes();//相差的分鐘數
????long?toMillis?=?Duration.between(of,now).toMillis();//相差毫秒數
????long?toNanos?=?Duration.between(of,now).toNanos();//相差的納秒數
????System.out.println("toDays:"+?toDays);?//?輸出?toDays:365
????System.out.println("toHours:"+?toHours);?//?輸出?toHours:8778
????System.out.println("toMinutes:"+?toMinutes);?//?輸出?toMinutes:526732
????System.out.println("toMillis:"+?toMillis);?//?輸出?toMillis:31603973840
????System.out.println("toNanos:"+?toNanos);?//?輸出?toNanos:31603973840000000
}

輸出結果:

改變當前時間的年月日時分秒

@Test
public?void?test()?{
????LocalDateTime?now?=?LocalDateTime.now();?//?當前時間
????LocalDateTime?withYear?=?now.withYear(2060);?//?改變當前年份(變成2060年)
????LocalDateTime?withMonth?=?now.withMonth(12);?//?改變當前月份(變成12月份)
????LocalDateTime?withDayOfMonth?=?now.withDayOfMonth(28);?//改變當前天數(變成28日)
????LocalDateTime?withHour?=?now.withHour(23);?//?改變當前小時數(變成23時)
????LocalDateTime?withMinute?=?now.withMinute(30);?//?改變當前分鐘(變成30分鐘)
????LocalDateTime?withSecond?=?now.withSecond(23);?//?改變當前小時數(變成23時)
????LocalDateTime?withDayOfYear?=?now.withDayOfYear(60);?//?從一月一號開始加上60天
????System.out.println(now);
????System.out.println("withYear:"+?withYear);
????System.out.println("withMonth:"+?withMonth);
????System.out.println("withDayOfMonth:"+?withDayOfMonth);
????System.out.println("withHour:"+?withHour);
????System.out.println("withMinute:"+?withMinute);
????System.out.println("withSecond:"+?withSecond);
????System.out.println("withDayOfYear:"+?withDayOfYear);
}

輸出結果:

自定義輸出的格式

@Test
public?void?test()?{
????//?自定義格式化:
????DateTimeFormatter?dtf?=?DateTimeFormatter.ofPattern("yyyy/MM/dd?HH:mm:ss");
????DateTimeFormatter?dtf1?=?DateTimeFormatter.ofPattern("yyyy.MM.dd?HH:mm:ss");
????System.out.println("自定義格式y(tǒng)yyy/MM/dd HH:mm:ss :"+dtf.format(LocalDateTime.now()));
????System.out.println("自定義格式y(tǒng)yyy.MM.dd HH:mm:ss :"+dtf1.format(LocalDateTime.now()));

????//?用自定義格式解析:
????LocalDateTime?dt2?=?LocalDateTime.parse("2020/10/20?15:16:17",?dtf);
????System.out.println("格式解析:"+dt2);
}

輸出結果:

LocalDateTime的with()方法

@Test
public?void?test()?{
????//?本月第一天0:00時刻:
????LocalDateTime?firstDay?=?LocalDate.now().withDayOfMonth(1).atStartOfDay();
????//?本月最后1天:
????LocalDate?lastDay?=?LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
????//?下月第1天:
????LocalDate?nextMonthFirstDay?=?LocalDate.now().with(TemporalAdjusters.firstDayOfNextMonth());
????//?本月第1個周一:
????LocalDate?firstWeekday?=?LocalDate.now().with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
}

兩個日期前后的比較與判斷

@Test
public?void?test()?{
????//判斷兩個時間點的前后
????LocalDateTime?now?=?LocalDateTime.now();
????LocalDateTime?target?=?LocalDateTime.of(2022,?2,?22,?22,?22,?22);
????boolean?isBefore?=?now.isBefore(target);
????System.out.println("now:"+now);
????System.out.println("target:"+target);
????System.out.println("isBefore:"+isBefore);
????System.out.println(LocalDate.now().isBefore(LocalDate.of(2022,?2,?22)));
????System.out.println(LocalTime.now().isAfter(LocalTime.parse("08:15:00")));
}

輸出結果:

結束語

LocalDateTime獲取時間以及計算都非常方便,而且是線程安全的,建議使用LocalDateTime。

到此這篇關于一文帶你搞懂Java8的LocalDateTime的文章就介紹到這了,更多相關Java8 LocalDateTime內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • RocketMQ實現隨緣分BUG小功能示例詳解

    RocketMQ實現隨緣分BUG小功能示例詳解

    這篇文章主要為大家介紹了RocketMQ實現隨緣分BUG小功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • java實現短信通信的完整教程

    java實現短信通信的完整教程

    這篇文章主要為大家詳細介紹了java實現短信通信的完整教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • JVM類加載之雙親委派機制解讀

    JVM類加載之雙親委派機制解讀

    這篇文章主要介紹了JVM類加載之雙親委派機制解讀,類加載階段分為加載、連接、初始化三個階段,而加載階段需要通過類的全限定名來獲取定義了此類的二進制字節(jié)流,Java特意把這一步抽出來用類加載器來實現,需要的朋友可以參考下
    2023-12-12
  • Java源碼跟蹤閱讀技巧【值得收藏】

    Java源碼跟蹤閱讀技巧【值得收藏】

    今天跟大家分享一下我平時閱讀源碼的幾個小技巧,對于閱讀Java中間件如Spring、Dubbo等框架源碼的同學有一定幫助。本文基于Eclipse IDE,感興趣的朋友跟隨小編一起看看吧
    2018-11-11
  • logback打印多次mybatis的sql日志問題

    logback打印多次mybatis的sql日志問題

    這篇文章主要介紹了logback打印多次mybatis的sql日志問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • SpringBoot多數據源配置方式以及報錯問題的解決

    SpringBoot多數據源配置方式以及報錯問題的解決

    這篇文章主要介紹了SpringBoot多數據源配置方式以及報錯問題的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java實現酒店管理系統(tǒng)

    java實現酒店管理系統(tǒng)

    這篇文章主要為大家詳細介紹了java實現酒店管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Java多線程解決龜兔賽跑問題詳解

    Java多線程解決龜兔賽跑問題詳解

    這篇文章主要為大家詳細介紹了Java如何使用線程休眠模擬龜兔賽跑比賽問題,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-08-08
  • Mybatis和Mybatis-Plus時間范圍查詢方式

    Mybatis和Mybatis-Plus時間范圍查詢方式

    這篇文章主要介紹了Mybatis和Mybatis-Plus時間范圍查詢方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • idea中不用git解除關聯的方式

    idea中不用git解除關聯的方式

    IntelliJ?IDEA是一款高效的Java編程環(huán)境,提供智能編碼輔助、J2EE、Ant等集成,支持本地和遠程調試,本文講述了如何在IDEA中解除版本控制和刪除.git文件夾,幫助開發(fā)者更好地管理項目設置和提升開發(fā)效率
    2024-10-10

最新評論

温州市| 思南县| 和静县| 平阳县| 三都| 海林市| 盐源县| 运城市| 鞍山市| 辽宁省| 武山县| 高平市| 望谟县| 巩义市| 外汇| 镇雄县| 汉川市| 黔西县| 武汉市| 东台市| 南宁市| 徐水县| 北安市| 桦甸市| 桃源县| 延吉市| 南通市| 莒南县| 临湘市| 临西县| 浑源县| 罗城| 广河县| 永仁县| 西吉县| 格尔木市| 玉屏| 十堰市| 黄平县| 广汉市| 甘谷县|