Table of Contents
ToggleDifference Between Two LocalDateTime in Java
計算兩個日期時間差距,有幾種方法可以找到不同時間單位,取得兩者之前的差異,提供了一些常見的方法,例如: Duration 、 ChronoUnit 、 until 等方式, Calculate Difference Between Two LocalDateTime 屬於 java.time 套件,日期和時間相關的 API ,本篇增加了範例,並透過單元測試來驗證產出結果。
檔案目錄
./
+- src
+- test
| +- org
| +- ruoxue
| +- java_147
| +- datetime
| +- localdatetime
| +- DifferenceTwoLocalDateTimeTest.java
單元測試
Java Time Between Two LocalDateTime 計算兩個 LocalDateTime 物件的差異。
Duration_between
Java Time Between Two LocalDateTime 建立兩個 LocalDateTime ,使用 Duration between 靜態方法,可以採用不同的時間單位,計算兩者之間的差異。
@Test
public void Duration_between() {
LocalDateTime localDateTime = LocalDateTime.of(2023, 8, 3, 1, 2, 3, 123456789);
LocalDateTime localDateTime2 = LocalDateTime.of(2024, 8, 3, 1, 2, 3, 123456789);
Duration duration = Duration.between(localDateTime, localDateTime2);
System.out.println(duration);
long days = duration.toDays();
System.out.println(days);
assertThat(days).isEqualTo(366);
long hours = duration.toHours();
System.out.println(hours);
assertThat(hours).isEqualTo(8784);
long minutes = duration.toMinutes();
System.out.println(minutes);
assertThat(minutes).isEqualTo(527040);
long seconds = duration.getSeconds();
System.out.println(seconds);
assertThat(seconds).isEqualTo(31622400);
long nanos = duration.toNanos();
System.out.println(nanos);
assertThat(nanos).isEqualTo(31622400000000000L);
}
PT8784H
366
8784
527040
31622400
31622400000000000
ChronoUnit_between
Java Time Between Two LocalDateTime 建立兩個 LocalDateTime ,使用 ChronoUnit Enum ,可以採用不同的時間單位,計算兩者之間的差異。
@Test
public void ChronoUnit_between() {
LocalDateTime localDateTime = LocalDateTime.of(2023, 8, 3, 1, 2, 3, 123456789);
LocalDateTime localDateTime2 = LocalDateTime.of(2024, 8, 3, 1, 2, 3, 123456789);
long years = ChronoUnit.YEARS.between(localDateTime, localDateTime2);
System.out.println(years);
assertThat(years).isEqualTo(1);
long months = ChronoUnit.MONTHS.between(localDateTime, localDateTime2);
System.out.println(months);
assertThat(months).isEqualTo(12);
long weeks = ChronoUnit.WEEKS.between(localDateTime, localDateTime2);
System.out.println(weeks);
assertThat(weeks).isEqualTo(52);
long days = ChronoUnit.DAYS.between(localDateTime, localDateTime2);
System.out.println(days);
assertThat(days).isEqualTo(366);
long hours = ChronoUnit.HOURS.between(localDateTime, localDateTime2);
System.out.println(hours);
assertThat(hours).isEqualTo(8784);
long minutes = ChronoUnit.MINUTES.between(localDateTime, localDateTime2);
System.out.println(minutes);
assertThat(minutes).isEqualTo(527040);
long seconds = ChronoUnit.SECONDS.between(localDateTime, localDateTime2);
System.out.println(seconds);
assertThat(seconds).isEqualTo(31622400);
long milliseconds = ChronoUnit.MILLIS.between(localDateTime, localDateTime2);
System.out.println(milliseconds);
assertThat(milliseconds).isEqualTo(31622400000L);
long nano = ChronoUnit.NANOS.between(localDateTime, localDateTime2);
System.out.println(nano);
assertThat(nano).isEqualTo(31622400000000000L);
}
1
12
52
366
8784
527040
31622400
31622400000
31622400000000000
until
Java Time Between Two LocalDateTime 建立兩個 LocalDateTime ,可以採用不同的時間單位,計算兩者之間的差異, Java LocalDateTime Difference Between Two Dates 提供範例參考。
@Test
public void until() {
LocalDateTime localDateTime = LocalDateTime.of(2023, 8, 3, 1, 2, 3, 123456789);
LocalDateTime localDateTime2 = LocalDateTime.of(2024, 8, 3, 1, 2, 3, 987654321);
long years = localDateTime.until(localDateTime2, ChronoUnit.YEARS);
System.out.println(years);
assertThat(years).isEqualTo(1);
long months = localDateTime.until(localDateTime2, ChronoUnit.MONTHS);
System.out.println(months);
assertThat(months).isEqualTo(12);
long weeks = localDateTime.until(localDateTime2, ChronoUnit.WEEKS);
System.out.println(weeks);
assertThat(weeks).isEqualTo(52);
long days = localDateTime.until(localDateTime2, ChronoUnit.DAYS);
System.out.println(days);
assertThat(days).isEqualTo(366);
long hours = localDateTime.until(localDateTime2, ChronoUnit.HOURS);
System.out.println(hours);
assertThat(hours).isEqualTo(8784);
long minutes = localDateTime.until(localDateTime2, ChronoUnit.MINUTES);
System.out.println(minutes);
assertThat(minutes).isEqualTo(527040);
long seconds = localDateTime.until(localDateTime2, ChronoUnit.SECONDS);
System.out.println(seconds);
assertThat(seconds).isEqualTo(31622400);
long milliseconds = localDateTime.until(localDateTime2, ChronoUnit.MILLIS);
System.out.println(milliseconds);
assertThat(milliseconds).isEqualTo(31622400864L);
long nano = localDateTime.until(localDateTime2, ChronoUnit.NANOS);
System.out.println(nano);
assertThat(nano).isEqualTo(31622400864197532L);
}
1
12
52
366
8784
527040
31622400
31622400864
31622400864197532
DifferenceTwoLocalDateTimeTest.java
Difference Between Two LocalDateTime in Multiple Units 新增單元測試,驗證 Java LocalDateTime Difference Between Two Dates 是否符合預期。
package org.ruoxue.java_147.datetime.localdatetime;
import static org.assertj.core.api.Assertions.assertThat;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import org.junit.Test;
public class DifferenceTwoLocalDateTimeTest {
@Test
public void Duration_between() {
LocalDateTime localDateTime = LocalDateTime.of(2023, 8, 3, 1, 2, 3, 123456789);
LocalDateTime localDateTime2 = LocalDateTime.of(2024, 8, 3, 1, 2, 3, 123456789);
Duration duration = Duration.between(localDateTime, localDateTime2);
System.out.println(duration);
long days = duration.toDays();
System.out.println(days);
assertThat(days).isEqualTo(366);
long hours = duration.toHours();
System.out.println(hours);
assertThat(hours).isEqualTo(8784);
long minutes = duration.toMinutes();
System.out.println(minutes);
assertThat(minutes).isEqualTo(527040);
long seconds = duration.getSeconds();
System.out.println(seconds);
assertThat(seconds).isEqualTo(31622400);
long nanos = duration.toNanos();
System.out.println(nanos);
assertThat(nanos).isEqualTo(31622400000000000L);
}
@Test
public void ChronoUnit_between() {
LocalDateTime localDateTime = LocalDateTime.of(2023, 8, 3, 1, 2, 3, 123456789);
LocalDateTime localDateTime2 = LocalDateTime.of(2024, 8, 3, 1, 2, 3, 123456789);
long years = ChronoUnit.YEARS.between(localDateTime, localDateTime2);
System.out.println(years);
assertThat(years).isEqualTo(1);
long months = ChronoUnit.MONTHS.between(localDateTime, localDateTime2);
System.out.println(months);
assertThat(months).isEqualTo(12);
long weeks = ChronoUnit.WEEKS.between(localDateTime, localDateTime2);
System.out.println(weeks);
assertThat(weeks).isEqualTo(52);
long days = ChronoUnit.DAYS.between(localDateTime, localDateTime2);
System.out.println(days);
assertThat(days).isEqualTo(366);
long hours = ChronoUnit.HOURS.between(localDateTime, localDateTime2);
System.out.println(hours);
assertThat(hours).isEqualTo(8784);
long minutes = ChronoUnit.MINUTES.between(localDateTime, localDateTime2);
System.out.println(minutes);
assertThat(minutes).isEqualTo(527040);
long seconds = ChronoUnit.SECONDS.between(localDateTime, localDateTime2);
System.out.println(seconds);
assertThat(seconds).isEqualTo(31622400);
long milliseconds = ChronoUnit.MILLIS.between(localDateTime, localDateTime2);
System.out.println(milliseconds);
assertThat(milliseconds).isEqualTo(31622400000L);
long nano = ChronoUnit.NANOS.between(localDateTime, localDateTime2);
System.out.println(nano);
assertThat(nano).isEqualTo(31622400000000000L);
}
@Test
public void until() {
LocalDateTime localDateTime = LocalDateTime.of(2023, 8, 3, 1, 2, 3, 123456789);
LocalDateTime localDateTime2 = LocalDateTime.of(2024, 8, 3, 1, 2, 3, 987654321);
long years = localDateTime.until(localDateTime2, ChronoUnit.YEARS);
System.out.println(years);
assertThat(years).isEqualTo(1);
long months = localDateTime.until(localDateTime2, ChronoUnit.MONTHS);
System.out.println(months);
assertThat(months).isEqualTo(12);
long weeks = localDateTime.until(localDateTime2, ChronoUnit.WEEKS);
System.out.println(weeks);
assertThat(weeks).isEqualTo(52);
long days = localDateTime.until(localDateTime2, ChronoUnit.DAYS);
System.out.println(days);
assertThat(days).isEqualTo(366);
long hours = localDateTime.until(localDateTime2, ChronoUnit.HOURS);
System.out.println(hours);
assertThat(hours).isEqualTo(8784);
long minutes = localDateTime.until(localDateTime2, ChronoUnit.MINUTES);
System.out.println(minutes);
assertThat(minutes).isEqualTo(527040);
long seconds = localDateTime.until(localDateTime2, ChronoUnit.SECONDS);
System.out.println(seconds);
assertThat(seconds).isEqualTo(31622400);
long milliseconds = localDateTime.until(localDateTime2, ChronoUnit.MILLIS);
System.out.println(milliseconds);
assertThat(milliseconds).isEqualTo(31622400864L);
long nano = localDateTime.until(localDateTime2, ChronoUnit.NANOS);
System.out.println(nano);
assertThat(nano).isEqualTo(31622400864197532L);
}
}
心得分享
Java LocalDateTime Difference Between Two Dates 計算日期時間,提供不同的時間單位,取得其差異,對日期時間進行運算更加方便,熟悉 Difference Between Two LocalDateTime in Multiple Units 這些方法的操作,提升開發效率,在應用上相當廣泛。