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

使用LocalDateTime計算兩個時間之間的間隔

 更新時間:2026年01月20日 09:44:31   作者:布丁吖  
本文介紹了如何使用Java中的LocalDateTime和LocalDate計算日期間隔,包括獲取時間間隔、精確到小數(shù)以及使用算法判斷時間段是否超過一個月或一年

自從認(rèn)識了LocalDateTime之后,使用的頻率越來越高了,使用多了就不可避免的涉及到日期的比較、加減以及計算日期間隔這些操作。

但是我發(fā)現(xiàn)自己好像不會,那就網(wǎng)上查資料,整唄。

LocalDateTime

要計算兩個LocalDateTime對象之間的間隔,可以使用java.time.Duration類。

可以很方便的獲取兩個時間之間的間隔。

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime startTime = LocalDateTime.of(2024, 7, 26, 5, 22, 56);
        LocalDateTime endTime = LocalDateTime.of(2024, 7, 26, 20, 23, 15);
        Duration duration = Duration.between(startTime, endTime);
        System.out.println(startTime.format(formatter) + "\n" + endTime.format(formatter));
        System.out.println("間隔天數(shù):" + duration.toDays());
        System.out.println("間隔小時: " + duration.toHours());
        System.out.println("間隔分鐘: " + duration.toMinutes());
        System.out.println("間隔秒數(shù): " + duration.toSeconds());

通過運行程序發(fā)現(xiàn)一個問題,就是獲取的天數(shù)、小時數(shù)、分鐘數(shù)都是取整的。

如果需要精確到小數(shù),可以獲取秒數(shù)自己計算。

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime startTime = LocalDateTime.of(2024, 7, 26, 5, 22, 56);
        LocalDateTime endTime = LocalDateTime.of(2024, 7, 26, 20, 23, 15);
        Duration duration = Duration.between(startTime, endTime);
        System.out.println(startTime.format(formatter) + "\n" + endTime.format(formatter));
        System.out.println("間隔天數(shù):" + duration.toDays());
        System.out.println("間隔小時: " + duration.toHours());
        System.out.println("間隔分鐘: " + duration.toMinutes());
        System.out.println("間隔秒數(shù): " + duration.toSeconds());
        // 自己計算
        BigDecimal divisor = BigDecimal.valueOf(60);
        BigDecimal minutes = BigDecimal.valueOf(duration.toSeconds()).divide(divisor, 2, RoundingMode.HALF_UP);
        BigDecimal hours = BigDecimal.valueOf(duration.toSeconds()).divide(divisor.multiply(divisor), 2, RoundingMode.HALF_UP);
        BigDecimal day = BigDecimal.valueOf(duration.toSeconds()).divide(divisor.multiply(divisor).multiply(BigDecimal.valueOf(24)), 2, RoundingMode.HALF_UP);
        System.out.println("間隔時間: " + duration.toSeconds() + "秒, " + minutes + "分鐘, " + hours + "小時, " + day + "天");

計算的精度需要自己把控。

LocalDate

LocalDate計算日期間隔就不用借助其他工具類了,他自身就有函數(shù)可以實現(xiàn)這個功能??。

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate startDate = LocalDate.of(2024, 11, 23);
        LocalDate endDate = LocalDate.of(2024, 11, 26);
        long days = startDate.until(endDate, ChronoUnit.DAYS);
        System.out.println(startDate.format(formatter) + "\n" + endDate.format(formatter));
        System.out.println("間隔天數(shù):" + days);

  • 基本算到天數(shù)就可以了,每月(年)的天數(shù)都是不固定的,也不好用天數(shù)來計算月(年)數(shù)。
  • 有時候需要判斷兩個時間的時間間隔是否大于一個月(年),可以通過開始日期加一月(年)然后和結(jié)束日期比較大小的方式來實現(xiàn)。

還有一種算法,可以這樣:

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate startDate = LocalDate.of(2024, 9, 23);
        LocalDate endDate = LocalDate.of(2024, 11, 26);
        Period until = startDate.until(endDate);
        System.out.println(startDate.format(formatter) + "\n" + endDate.format(formatter));
        System.out.println("間隔年數(shù):" + until.getYears());
        System.out.println("間隔月數(shù):" + until.getMonths());
        System.out.println("間隔天數(shù):" + until.getDays());

例二:

這里的意思是開始時間和結(jié)束時間之間相差0年1個月28天,連起來看才更合常理,分開來用的的場景不多。

LocalTime

要計算兩個LocalTime對象之間的間隔,也可以使用java.time.Duration類。

可以參考LocalDateTime。

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
        LocalTime startTime = LocalTime.of(4, 7, 25);
        LocalTime endTime = LocalTime.of(20, 7, 26);
        Duration duration = Duration.between(startTime, endTime);
        System.out.println(startTime.format(formatter) + "\n" + endTime.format(formatter));
        System.out.println("間隔天數(shù):" + duration.toDays());
        System.out.println("間隔小時: " + duration.toHours());
        System.out.println("間隔分鐘: " + duration.toMinutes());
        System.out.println("間隔秒數(shù): " + duration.toSeconds());
        // 自己計算
        BigDecimal divisor = BigDecimal.valueOf(60);
        BigDecimal minutes = BigDecimal.valueOf(duration.toSeconds()).divide(divisor, 2, RoundingMode.HALF_UP);
        BigDecimal hours = BigDecimal.valueOf(duration.toSeconds()).divide(divisor.multiply(divisor), 2, RoundingMode.HALF_UP);
        BigDecimal day = BigDecimal.valueOf(duration.toSeconds()).divide(divisor.multiply(divisor).multiply(BigDecimal.valueOf(24)), 2, RoundingMode.HALF_UP);
        System.out.println("間隔時間: " + duration.toSeconds() + "秒, " + minutes + "分鐘, " + hours + "小時, " + day + "天");

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中用Socket實現(xiàn)HTTP文件上傳實例

    Java中用Socket實現(xiàn)HTTP文件上傳實例

    本篇文章主要介紹了Java中用Socket實現(xiàn)HTTP文件上傳實例,詳細(xì)的介紹了通過讀取Socket的輸入流來實現(xiàn)一個文件上傳的功能,有興趣的同學(xué)可以一起了解一下
    2017-04-04
  • Spring Boot 基于注解的 Redis 緩存使用詳解

    Spring Boot 基于注解的 Redis 緩存使用詳解

    本篇文章主要介紹了Spring Boot 基于注解的 Redis 緩存使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • IDEA+Maven搭建JavaWeb項目的方法步驟

    IDEA+Maven搭建JavaWeb項目的方法步驟

    本文主要介紹了IDEA+Maven搭建JavaWeb項目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Spring響應(yīng)式編程之Reactor操作符詳解

    Spring響應(yīng)式編程之Reactor操作符詳解

    文章介紹了Reactor庫中常用的響應(yīng)式流操作符,分為創(chuàng)建、轉(zhuǎn)換、組合、條件和錯誤處理五類,詳細(xì)列舉了每類操作符的功能和用途,這些操作符旨在提高響應(yīng)式流的可讀性和開發(fā)效率,幫助開發(fā)者更高效地處理數(shù)據(jù)流
    2025-09-09
  • 淺談springboot項目中定時任務(wù)如何優(yōu)雅退出

    淺談springboot項目中定時任務(wù)如何優(yōu)雅退出

    這篇文章主要介紹了淺談springboot項目中定時任務(wù)如何優(yōu)雅退出?具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 為zookeeper配置相應(yīng)的acl權(quán)限

    為zookeeper配置相應(yīng)的acl權(quán)限

    這篇文章主要介紹了為zookeeper配置相應(yīng)的acl權(quán)限的相關(guān)實例,具有一定參考價值,需要的朋友可以了解下。
    2017-09-09
  • Java實現(xiàn)全排列的三種算法詳解

    Java實現(xiàn)全排列的三種算法詳解

    從n個不同元素中任取m(m≤n)個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的一個排列。當(dāng)m=n時所有的排列情況叫全排列。本文總結(jié)了Java實現(xiàn)全排列的三種算法,需要的可以參考下
    2022-06-06
  • java如何完成輸出語句實例詳解

    java如何完成輸出語句實例詳解

    輸入輸出可以說是計算機的基本功能,下面這篇文章主要給大家介紹了關(guān)于java如何完成輸出語句的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • Java實現(xiàn)生產(chǎn)者消費者問題與讀者寫者問題詳解

    Java實現(xiàn)生產(chǎn)者消費者問題與讀者寫者問題詳解

    這篇文章主要介紹了Java實現(xiàn)生產(chǎn)者消費者問題與讀者寫者問題詳解,小編覺得挺不錯的,這里分享給大家,供需要的親朋好友參考。
    2017-11-11
  • Java高并發(fā)編程之CAS實現(xiàn)無鎖隊列代碼實例

    Java高并發(fā)編程之CAS實現(xiàn)無鎖隊列代碼實例

    這篇文章主要介紹了Java高并發(fā)編程之CAS實現(xiàn)無鎖隊列代碼實例,在多線程操作中,我們通常會添加鎖來保證線程的安全,那么這樣勢必會影響程序的性能,那么為了解決這一問題,于是就有了在無鎖操作的情況下依然能夠保證線程的安全,需要的朋友可以參考下
    2023-12-12

最新評論

吉水县| 阳泉市| 娄底市| 天祝| 崇明县| 育儿| 托里县| 清水县| 小金县| 安仁县| 墨脱县| 中阳县| 新蔡县| 吴桥县| 德安县| 绿春县| 卓资县| 绵竹市| 城固县| 墨竹工卡县| 五华县| 桐乡市| 白山市| 扶余县| 大洼县| 瑞昌市| 祁阳县| 舞阳县| 乐昌市| 株洲县| 定远县| 呼和浩特市| 明光市| 额敏县| 若尔盖县| 榕江县| 滨州市| 沾益县| 江都市| 阿合奇县| 田东县|