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

使用LocalDateTime計(jì)算兩個(gè)時(shí)間之間的間隔

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

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

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

LocalDateTime

要計(jì)算兩個(gè)LocalDateTime對(duì)象之間的間隔,可以使用java.time.Duration類。

可以很方便的獲取兩個(gè)時(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("間隔小時(shí): " + duration.toHours());
        System.out.println("間隔分鐘: " + duration.toMinutes());
        System.out.println("間隔秒數(shù): " + duration.toSeconds());

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

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

        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("間隔小時(shí): " + duration.toHours());
        System.out.println("間隔分鐘: " + duration.toMinutes());
        System.out.println("間隔秒數(shù): " + duration.toSeconds());
        // 自己計(jì)算
        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("間隔時(shí)間: " + duration.toSeconds() + "秒, " + minutes + "分鐘, " + hours + "小時(shí), " + day + "天");

計(jì)算的精度需要自己把控。

LocalDate

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

        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ù)來(lái)計(jì)算月(年)數(shù)。
  • 有時(shí)候需要判斷兩個(gè)時(shí)間的時(shí)間間隔是否大于一個(gè)月(年),可以通過(guò)開始日期加一月(年)然后和結(jié)束日期比較大小的方式來(lái)實(shí)現(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());

例二:

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

LocalTime

要計(jì)算兩個(gè)LocalTime對(duì)象之間的間隔,也可以使用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("間隔小時(shí): " + duration.toHours());
        System.out.println("間隔分鐘: " + duration.toMinutes());
        System.out.println("間隔秒數(shù): " + duration.toSeconds());
        // 自己計(jì)算
        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("間隔時(shí)間: " + duration.toSeconds() + "秒, " + minutes + "分鐘, " + hours + "小時(shí), " + day + "天");

總結(jié)

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

相關(guān)文章

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

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

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

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

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

    IDEA+Maven搭建JavaWeb項(xiàng)目的方法步驟

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

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

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

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

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

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

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

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

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

    java如何完成輸出語(yǔ)句實(shí)例詳解

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

    Java實(shí)現(xiàn)生產(chǎn)者消費(fèi)者問(wèn)題與讀者寫者問(wèn)題詳解

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

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

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

最新評(píng)論

临夏县| 西华县| 惠东县| 聂荣县| 冕宁县| 康平县| 疏勒县| 乐昌市| 颍上县| 潜山县| 沁水县| 彝良县| 呼玛县| 吉首市| 垣曲县| 临洮县| 康保县| 星子县| 松溪县| 获嘉县| 三台县| 浙江省| 民丰县| 普宁市| 进贤县| 喜德县| 保山市| 肇庆市| 于田县| 宜宾县| 青神县| 托克逊县| 萨嘎县| 大竹县| 太仆寺旗| 拉孜县| 耿马| 平顶山市| 东乌| 清涧县| 定远县|