Java計算時間差和日期差五種常用示例
一、使用 Instant 和 Duration 類計算時間差
Instant start = Instant.now();
Thread.sleep(1000); // 讓程序睡眠 1 秒鐘,模擬耗時操作
Instant end = Instant.now();
Duration duration = Duration.between(start, end);
System.out.println("Time elapsed: " + duration.toMillis() + " milliseconds");這個示例使用 Instant 類獲取開始時間和結(jié)束時間,然后使用 Duration 類計算時間差。Duration 類提供了一些方便的方法,如 toMillis() 和 toSeconds() 方法,可以將時間差轉(zhuǎn)換為毫秒或秒數(shù)。
二、使用 LocalDate 和 ChronoUnit 類計算日期差
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);這個示例使用 LocalDate 類獲取開始日期和結(jié)束日期,在使用 ChronoUnit 類計算日期差時,使用 DAYS 枚舉表示計算出的日期差的時間單位為天數(shù)。需要注意的是,ChronoUnit 類提供了多個時間單位,可以根據(jù)具體需求選擇適當?shù)臅r間單位。
三、使用 Joda-Time 庫計算時間差和日期差
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());這個示例使用 Joda-Time 庫獲取開始時間和結(jié)束時間。在計算時間差時,使用 Duration 類計算時間差,并使用 getMillis() 方法獲取時間差的毫秒數(shù);在計算日期差時,使用 Days 類計算日期差,并使用 getDays() 方法獲取天數(shù)。需要注意的是,該庫已在 Java 8 中得到了標準化,因此,現(xiàn)在的 Java 版本已經(jīng)可以通過使用 java.time 包來代替 Joda-Time 庫。Joda-Time庫的使用在文章末尾!
四、使用 Instant 和 Period 類計算日期差
Instant start = Instant.now();
Thread.sleep(1000); // 讓程序睡眠 1 秒鐘,模擬耗時操作
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());這個示例使用 Instant 類獲取開始時間和結(jié)束時間,并使用 Period 類計算日期差。Period 類用于以年、月和日為單位表示時間段。需要注意的是,由于 Instant 類表示一個瞬間,不包含時區(qū)和日期信息,因此,需要使用 atZone() 方法將其轉(zhuǎn)換為帶時區(qū)的 ZonedDateTime 類。如果程序運行在不同的時區(qū)中,需注意時區(qū)的差異對最終計算結(jié)果的影響。
五、使用 Java 8 的 java.time.temporal.ChronoUnit 類計算時間或日期差
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);這個示例使用 Java 8 的 java.time.temporal.ChronoUnit 類獲取開始時間和結(jié)束時間,然后計算時間或日期差。ChronoUnit 類提供了多個方法,可用于計算不同時間段的差。在使用此方法時,需要注意開始時間和結(jié)束時間必須是同一時間段的。
Joda-Time
maven
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.10</version>
</dependency>Joda-Time 庫的通用工具類,主要包括日期、時間、時間間隔等功能
import org.joda.time.*;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
public class JodaTimeUtils {
// 獲取當前日期
public static LocalDate getCurrentDate() {
return new LocalDate();
}
// 獲取當前時間
public static LocalTime getCurrentTime() {
return new LocalTime();
}
// 獲取當前日期和時間
public static LocalDateTime getCurrentDateTime() {
return new LocalDateTime();
}
// 獲取指定日期的開始時間
public static LocalDateTime getStartOfDay(LocalDate date) {
return date.toLocalDateTime(LocalTime.MIN);
}
// 獲取指定日期的結(jié)束時間
public static LocalDateTime getEndOfDay(LocalDate date) {
return date.toLocalDateTime(LocalTime.MAX);
}
// 獲取指定日期時間的格式化字符串
public static String formatDateTime(LocalDateTime dateTime, String pattern) {
DateTimeFormatter formatter = DateTimeFormat.forPattern(pattern);
return dateTime.toString(formatter);
}
// 將格式化字符串轉(zhuǎn)換成日期時間
public static LocalDateTime parseDateTime(String dateTimeString, String pattern) {
DateTimeFormatter formatter = DateTimeFormat.forPattern(pattern);
return formatter.parseLocalDateTime(dateTimeString);
}
// 計算兩個日期之間的天數(shù)
public static int getDaysBetween(LocalDate startDate, LocalDate endDate) {
Days days = Days.daysBetween(startDate, endDate);
return days.getDays();
}
// 計算兩個日期時間之間的秒數(shù)
public static int getSecondsBetween(LocalDateTime startDateTime, LocalDateTime endDateTime) {
Seconds seconds = Seconds.secondsBetween(startDateTime, endDateTime);
return seconds.getSeconds();
}
// 計算兩個日期時間之間的分鐘數(shù)
public static int getMinutesBetween(LocalDateTime startDateTime, LocalDateTime endDateTime) {
Minutes minutes = Minutes.minutesBetween(startDateTime, endDateTime);
return minutes.getMinutes();
}
// 計算兩個日期時間之間的小時數(shù)
public static int getHoursBetween(LocalDateTime startDateTime, LocalDateTime endDateTime) {
Hours hours = Hours.hoursBetween(startDateTime, endDateTime);
return hours.getHours();
}
// 計算兩個日期時間之間的毫秒數(shù)
public static long getMillisBetween(LocalDateTime startDateTime, LocalDateTime endDateTime) {
return new Duration(startDateTime.toDateTime(), endDateTime.toDateTime()).getMillis();
}
// 判斷兩個日期是否相等
public static boolean isEqual(LocalDate date1, LocalDate date2) {
return date1.equals(date2);
}
// 判斷兩個日期時間是否相等
public static boolean isEqual(LocalDateTime dateTime1, LocalDateTime dateTime2) {
return dateTime1.equals(dateTime2);
}
// 判斷一個日期是否在另一個日期之前
public static boolean isBefore(LocalDate date1, LocalDate date2) {
return date1.isBefore(date2);
}
// 判斷一個日期時間是否在另一個日期時間之前
public static boolean isBefore(LocalDateTime dateTime1, LocalDateTime dateTime2) {
return dateTime1.isBefore(dateTime2);
}
// 判斷一個日期是否在另一個日期之后
public static boolean isAfter(LocalDate date1, LocalDate date2) {
return date1.isAfter(date2);
}
// 判斷一個日期時間是否在另一個日期時間之后
public static boolean isAfter(LocalDateTime dateTime1, LocalDateTime dateTime2) {
return dateTime1.isAfter(dateTime2);
}
// 判斷一個日期是否在另一時間間隔內(nèi)
public static boolean isInInterval(LocalDate date, Interval interval) {
return interval.contains(date.toDateTimeAtStartOfDay());
}
// 判斷一個日期時間是否在另一時間間隔內(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é)
到此這篇關于Java計算時間差和日期差五種常用示例的文章就介紹到這了,更多相關Java計算時間差和日期差內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot使用Jasypt對YML文件配置內(nèi)容加密的方法(數(shù)據(jù)庫密碼加密)
本文介紹了如何在SpringBoot項目中使用Jasypt對application.yml文件中的敏感信息(如數(shù)據(jù)庫密碼)進行加密,通過引入Jasypt依賴、配置加密密鑰、加密敏感信息并測試解密功能,可以提高配置文件的安全性,減少因配置文件泄露導致的安全風險,感興趣的朋友一起看看吧2025-03-03
java+mysql實現(xiàn)圖書館管理系統(tǒng)實戰(zhàn)
這篇文章主要為大家詳細介紹了java+mysql實現(xiàn)圖書館管理系統(tǒng)實戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-12-12
Java鏈表(Linked List)基本原理與實現(xiàn)方法入門示例
這篇文章主要介紹了Java鏈表(Linked List)基本原理與實現(xiàn)方法,結(jié)合實例形式分析了Java鏈表(Linked List)的功能、原理、實現(xiàn)方法與操作注意事項,需要的朋友可以參考下2020-03-03

