欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java計(jì)算時(shí)間差和日期差五種常用示例

 更新時(shí)間:2023年08月15日 10:35:19   作者:善BiaN的sKy  
這篇文章主要給大家介紹了關(guān)于Java計(jì)算時(shí)間差和日期差五種常用示例的相關(guān)資料,最近工作中遇到需要計(jì)算時(shí)間差和日期差,搜索了幾種計(jì)算時(shí)間差和日期差的方法,這里總結(jié)一下,需要的朋友可以參考下

一、使用 Instant 和 Duration 類計(jì)算時(shí)間差

Instant start = Instant.now();
Thread.sleep(1000);   // 讓程序睡眠 1 秒鐘,模擬耗時(shí)操作
Instant end = Instant.now();
Duration duration = Duration.between(start, end);
System.out.println("Time elapsed: " + duration.toMillis() + " milliseconds");

這個(gè)示例使用 Instant 類獲取開始時(shí)間和結(jié)束時(shí)間,然后使用 Duration 類計(jì)算時(shí)間差。Duration 類提供了一些方便的方法,如 toMillis() 和 toSeconds() 方法,可以將時(shí)間差轉(zhuǎn)換為毫秒或秒數(shù)。

二、使用 LocalDate 和 ChronoUnit 類計(jì)算日期差

LocalDate start = LocalDate.of(2021, Month.JANUARY, 1);
LocalDate end = LocalDate.of(2021, Month.DECEMBER, 31);
long days = ChronoUnit.DAYS.between(start, end);
System.out.println("Days elapsed: " + days);

這個(gè)示例使用 LocalDate 類獲取開始日期和結(jié)束日期,在使用 ChronoUnit 類計(jì)算日期差時(shí),使用 DAYS 枚舉表示計(jì)算出的日期差的時(shí)間單位為天數(shù)。需要注意的是,ChronoUnit 類提供了多個(gè)時(shí)間單位,可以根據(jù)具體需求選擇適當(dāng)?shù)臅r(shí)間單位。

三、使用 Joda-Time 庫計(jì)算時(shí)間差和日期差

DateTime start = new DateTime(2022, 1, 1, 0, 0, 0, 0);
DateTime end = new DateTime(2022, 12, 31, 23, 59, 59, 999);
Duration duration = new Duration(start, end);
System.out.println("Time elapsed: " + duration.getMillis() + " milliseconds");
Days days = Days.daysBetween(start.toLocalDate(), end.toLocalDate());
System.out.println("Days elapsed: " + days.getDays());

這個(gè)示例使用 Joda-Time 庫獲取開始時(shí)間和結(jié)束時(shí)間。在計(jì)算時(shí)間差時(shí),使用 Duration 類計(jì)算時(shí)間差,并使用 getMillis() 方法獲取時(shí)間差的毫秒數(shù);在計(jì)算日期差時(shí),使用 Days 類計(jì)算日期差,并使用 getDays() 方法獲取天數(shù)。需要注意的是,該庫已在 Java 8 中得到了標(biāo)準(zhǔn)化,因此,現(xiàn)在的 Java 版本已經(jīng)可以通過使用 java.time 包來代替 Joda-Time 庫。Joda-Time庫的使用在文章末尾!

四、使用 Instant 和 Period 類計(jì)算日期差

Instant start = Instant.now();
Thread.sleep(1000);   // 讓程序睡眠 1 秒鐘,模擬耗時(shí)操作
Instant end = Instant.now();
Period period = Period.between(start.atZone(ZoneId.systemDefault()).toLocalDate(),
                               end.atZone(ZoneId.systemDefault()).toLocalDate());
System.out.println("Days elapsed: " + period.getDays());

這個(gè)示例使用 Instant 類獲取開始時(shí)間和結(jié)束時(shí)間,并使用 Period 類計(jì)算日期差。Period 類用于以年、月和日為單位表示時(shí)間段。需要注意的是,由于 Instant 類表示一個(gè)瞬間,不包含時(shí)區(qū)和日期信息,因此,需要使用 atZone() 方法將其轉(zhuǎn)換為帶時(shí)區(qū)的 ZonedDateTime 類。如果程序運(yùn)行在不同的時(shí)區(qū)中,需注意時(shí)區(qū)的差異對最終計(jì)算結(jié)果的影響。

五、使用 Java 8 的 java.time.temporal.ChronoUnit 類計(jì)算時(shí)間或日期差

LocalDateTime start = LocalDateTime.of(2021, Month.JANUARY, 1, 0, 0, 0);
LocalDateTime end = LocalDateTime.of(2021, Month.DECEMBER, 31, 23, 59, 59);
long days = ChronoUnit.DAYS.between(start, end);
long hours = ChronoUnit.HOURS.between(start, end);
long minutes = ChronoUnit.MINUTES.between(start, end);
long seconds = ChronoUnit.SECONDS.between(start, end);
System.out.println("Days elapsed: " + days);
System.out.println("Hours elapsed: " + hours);
System.out.println("Minutes elapsed: " + minutes);
System.out.println("Seconds elapsed: " + seconds);

這個(gè)示例使用 Java 8 的 java.time.temporal.ChronoUnit 類獲取開始時(shí)間和結(jié)束時(shí)間,然后計(jì)算時(shí)間或日期差。ChronoUnit 類提供了多個(gè)方法,可用于計(jì)算不同時(shí)間段的差。在使用此方法時(shí),需要注意開始時(shí)間和結(jié)束時(shí)間必須是同一時(shí)間段的。

Joda-Time

maven

<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.10.10</version>
</dependency>

 Joda-Time 庫的通用工具類,主要包括日期、時(shí)間、時(shí)間間隔等功能

import org.joda.time.*;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
public class JodaTimeUtils {
    // 獲取當(dāng)前日期
    public static LocalDate getCurrentDate() {
        return new LocalDate();
    }
    // 獲取當(dāng)前時(shí)間
    public static LocalTime getCurrentTime() {
        return new LocalTime();
    }
    // 獲取當(dāng)前日期和時(shí)間
    public static LocalDateTime getCurrentDateTime() {
        return new LocalDateTime();
    }
    // 獲取指定日期的開始時(shí)間
    public static LocalDateTime getStartOfDay(LocalDate date) {
        return date.toLocalDateTime(LocalTime.MIN);
    }
    // 獲取指定日期的結(jié)束時(shí)間
    public static LocalDateTime getEndOfDay(LocalDate date) {
        return date.toLocalDateTime(LocalTime.MAX);
    }
    // 獲取指定日期時(shí)間的格式化字符串
    public static String formatDateTime(LocalDateTime dateTime, String pattern) {
        DateTimeFormatter formatter = DateTimeFormat.forPattern(pattern);
        return dateTime.toString(formatter);
    }
    // 將格式化字符串轉(zhuǎn)換成日期時(shí)間
    public static LocalDateTime parseDateTime(String dateTimeString, String pattern) {
        DateTimeFormatter formatter = DateTimeFormat.forPattern(pattern);
        return formatter.parseLocalDateTime(dateTimeString);
    }
    // 計(jì)算兩個(gè)日期之間的天數(shù)
    public static int getDaysBetween(LocalDate startDate, LocalDate endDate) {
        Days days = Days.daysBetween(startDate, endDate);
        return days.getDays();
    }
    // 計(jì)算兩個(gè)日期時(shí)間之間的秒數(shù)
    public static int getSecondsBetween(LocalDateTime startDateTime, LocalDateTime endDateTime) {
        Seconds seconds = Seconds.secondsBetween(startDateTime, endDateTime);
        return seconds.getSeconds();
    }
    // 計(jì)算兩個(gè)日期時(shí)間之間的分鐘數(shù)
    public static int getMinutesBetween(LocalDateTime startDateTime, LocalDateTime endDateTime) {
        Minutes minutes = Minutes.minutesBetween(startDateTime, endDateTime);
        return minutes.getMinutes();
    }
    // 計(jì)算兩個(gè)日期時(shí)間之間的小時(shí)數(shù)
    public static int getHoursBetween(LocalDateTime startDateTime, LocalDateTime endDateTime) {
        Hours hours = Hours.hoursBetween(startDateTime, endDateTime);
        return hours.getHours();
    }
    // 計(jì)算兩個(gè)日期時(shí)間之間的毫秒數(shù)
    public static long getMillisBetween(LocalDateTime startDateTime, LocalDateTime endDateTime) {
        return new Duration(startDateTime.toDateTime(), endDateTime.toDateTime()).getMillis();
    }
    // 判斷兩個(gè)日期是否相等
    public static boolean isEqual(LocalDate date1, LocalDate date2) {
        return date1.equals(date2);
    }
    // 判斷兩個(gè)日期時(shí)間是否相等
    public static boolean isEqual(LocalDateTime dateTime1, LocalDateTime dateTime2) {
        return dateTime1.equals(dateTime2);
    }
    // 判斷一個(gè)日期是否在另一個(gè)日期之前
    public static boolean isBefore(LocalDate date1, LocalDate date2) {
        return date1.isBefore(date2);
    }
    // 判斷一個(gè)日期時(shí)間是否在另一個(gè)日期時(shí)間之前
    public static boolean isBefore(LocalDateTime dateTime1, LocalDateTime dateTime2) {
        return dateTime1.isBefore(dateTime2);
    }
    // 判斷一個(gè)日期是否在另一個(gè)日期之后
    public static boolean isAfter(LocalDate date1, LocalDate date2) {
        return date1.isAfter(date2);
    }
    // 判斷一個(gè)日期時(shí)間是否在另一個(gè)日期時(shí)間之后
    public static boolean isAfter(LocalDateTime dateTime1, LocalDateTime dateTime2) {
        return dateTime1.isAfter(dateTime2);
    }
    // 判斷一個(gè)日期是否在另一時(shí)間間隔內(nèi)
    public static boolean isInInterval(LocalDate date, Interval interval) {
        return interval.contains(date.toDateTimeAtStartOfDay());
    }
    // 判斷一個(gè)日期時(shí)間是否在另一時(shí)間間隔內(nèi)
    public static boolean isInInterval(LocalDateTime dateTime, Interval interval) {
        return interval.contains(dateTime.toDateTime());
    }
}

使用示例:

LocalDate date1 = new LocalDate(2020, 1, 1);
LocalDate date2 = new LocalDate(2022, 1, 1);
System.out.println(JodaTimeUtils.getDaysBetween(date1, date2)); // 輸出 731
LocalDateTime dateTime1 = new LocalDateTime(2020, 1, 1, 12, 0, 0);
LocalDateTime dateTime2 = new LocalDateTime(2022, 1, 1, 12, 0, 0);
System.out.println(JodaTimeUtils.getHoursBetween(dateTime1, dateTime2)); // 輸出 17520
String dateTimeString = "2020-01-01 12:00:00";
LocalDateTime dateTime = JodaTimeUtils.parseDateTime(dateTimeString, "yyyy-MM-dd HH:mm:ss");
System.out.println(JodaTimeUtils.formatDateTime(dateTime, "yyyy年MM月dd日 HH:mm:ss")); // 輸出 2020年01月01日 12:00:00
LocalDateTime startDateTime = new LocalDateTime(2020, 1, 1, 12, 0, 0);
LocalDateTime endDateTime = new LocalDateTime(2022, 1, 1, 12, 0, 0);
Interval interval = new Interval(startDateTime.toDateTime(), endDateTime.toDateTime());
LocalDateTime dateTimeBefore = new LocalDateTime(2019, 1, 1, 12, 0, 0);
System.out.println(JodaTimeUtils.isInInterval(dateTimeBefore, interval)); // 輸出 false
LocalDateTime dateTimeAfter = new LocalDateTime(2023, 1, 1, 12, 0, 0);
System.out.println(JodaTimeUtils.isInInterval(dateTimeAfter, interval)); // 輸出 false
LocalDateTime dateTimeWithin = new LocalDateTime(2021, 1, 1, 12, 0, 0);
System.out.println(JodaTimeUtils.isInInterval(dateTimeWithin, interval)); // 輸出 true

總結(jié) 

到此這篇關(guān)于Java計(jì)算時(shí)間差和日期差五種常用示例的文章就介紹到這了,更多相關(guān)Java計(jì)算時(shí)間差和日期差內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring注解驅(qū)動之AOP功能測試

    Spring注解驅(qū)動之AOP功能測試

    這篇文章主要介紹了Spring注解驅(qū)動之AOP功能測試,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • springboot如何使用logback-spring配置日志格式,并分環(huán)境配置

    springboot如何使用logback-spring配置日志格式,并分環(huán)境配置

    這篇文章主要介紹了springboot如何使用logback-spring配置日志格式,并分環(huán)境配置的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 三種Spring BeanName生成器,你了解嗎

    三種Spring BeanName生成器,你了解嗎

    無論我們是通過 XML 文件,還是 Java 代碼,亦或是包掃描的方式去注冊 Bean,都可以不設(shè)置BeanName,而Spring均會為之提供默認(rèn)的 beanName,本文我們就來看看 Spring 中三種處理不同情況的 beanName生成器吧
    2023-09-09
  • java中注解的原理解析

    java中注解的原理解析

    這篇文章主要介紹了java中注解的原理解析,java 注解又稱 Java 標(biāo)注,是 JDK5.0 引入的一種注釋機(jī)制,可以理解為為某個(gè)東西,打個(gè)標(biāo)記的記號,等要使用這個(gè)注解時(shí),可以通過反射獲取標(biāo)注里面的內(nèi)容,需要的朋友可以參考下
    2023-10-10
  • 淺談Spring Boot日志框架實(shí)踐

    淺談Spring Boot日志框架實(shí)踐

    這篇文章主要介紹了淺談Spring Boot日志框架實(shí)踐,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Java面試基礎(chǔ)之TCP連接以及其優(yōu)化

    Java面試基礎(chǔ)之TCP連接以及其優(yōu)化

    這篇文章主要給大家介紹了關(guān)于Java面試基礎(chǔ)之TCP連接以及其優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • java面試LruCache?和?LinkedHashMap及算法實(shí)現(xiàn)

    java面試LruCache?和?LinkedHashMap及算法實(shí)現(xiàn)

    這篇文章主要為大家介紹了java面試LruCache?和?LinkedHashMap及算法實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 淺談java String.split丟失結(jié)尾空字符串的問題

    淺談java String.split丟失結(jié)尾空字符串的問題

    下面小編就為大家?guī)硪黄獪\談java String.split丟失結(jié)尾空字符串的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • java編程是做什么的

    java編程是做什么的

    在本篇文章里小編給大家整理的是一篇關(guān)于java編程是什么相關(guān)的基礎(chǔ)知識點(diǎn)內(nèi)容,有興趣的朋友們可以閱讀下。
    2021-01-01
  • Spring Cloud Alibaba Nacos Config加載配置詳解流程

    Spring Cloud Alibaba Nacos Config加載配置詳解流

    這篇文章主要介紹了Spring Cloud Alibaba Nacos Config配置中心實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-07-07

最新評論