Java 8 两个日期之间的差异

Java 8 两个日期之间的差异

原文: https://howtodoinjava.com/java/date-time/calculate-difference-between-two-dates-in-java/

Java 示例计算 Java 8 中两个日期之间的差。 首先,我们将学习使用甚至在 Java 8 发行之前就可用的 Jodatime API 计算差异。 如果您仍未使用 Java 8,那么 JodaTime 应该是您的首选。

后 3 种方法使用的是 Java 8 以来可用的新的日期时间 API 特性。

1. JodaTime – 两个日期之间的差异(Java 8 之前)

Maven

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

示例

大家都更喜欢可读性,我建议使用 Jodatime 库(实际上启发了 Java 8 日期/时间 API)。 例如:

public void difference_between_two_dates_duration_Joda()
 {
     DateTime dateOfBirth = new DateTime(1988, 7, 4, 0, 0, GregorianChronology.getInstance());
     DateTime currentDate = new DateTime();
     Days diffInDays = Days.daysBetween(dateOfBirth, currentDate);
     Hours diffInHours = Hours.hoursBetween(dateOfBirth, currentDate);
     Minutes diffInMinutes = Minutes.minutesBetween(dateOfBirth, currentDate);
     Seconds seconds = Seconds.secondsBetween(dateOfBirth, currentDate);
 }

2. Java 8 – 两个日期之间的差异

Java Date一直缺乏足够的支持来有效地表达日期和时间段。 Java 8 首次尝试升级此日期/时间 API。 如果您在项目中使用 Java 8,则一定要使用以下两种方法之一来计算两个日期之间的日期/时间差。

2.1 java.time.Period示例,以了解日/月/年的差异

Java 程序使用Period类获取在两天之间的差异

LocalDate endofCentury = LocalDate.of(2014, 01, 01);
LocalDate now = LocalDate.now();

Period diff = Period.between(endofCentury, now);

System.out.printf("Difference is %d years, %d months and %d days old", 
					diff.getYears(), diff.getMonths(), diff.getDays());

2.2 java.time.temporal.ChronoUnit示例,以了解日/月/年的差异

Java 程序使用ChronoUnit类来获取两个月之间的日期之间的差异

public void difference_between_two_dates_java8()
{
     LocalDate dateOfBirth = LocalDate.of(1980, Month.JULY, 4);
     LocalDate currentDate = LocalDate.now();
     long diffInDays = ChronoUnit.DAYS.between(dateOfBirth, currentDate);
     long diffInMonths = ChronoUnit.MONTHS.between(dateOfBirth, currentDate);
     long diffInYears = ChronoUnit.YEARS.between(dateOfBirth, currentDate);
}

您可以使用ChronoUnit了解较小时间单位中的差异,例如毫秒分钟等。但是在这种情况下,您将不得不使用LocalDateTime代替在第一个示例中使用的LocalDate

public void difference_between_two_dates_duration()
 {
     LocalDateTime dateTime = LocalDateTime.of(1988, 7, 4, 0, 0);
     LocalDateTime dateTime2 = LocalDateTime.now();
     long diffInNano = ChronoUnit.NANOS.between(dateTime, dateTime2);
     long diffInSeconds = ChronoUnit.SECONDS.between(dateTime, dateTime2);
     long diffInMilli = ChronoUnit.MILLIS.between(dateTime, dateTime2);
     long diffInMinutes = ChronoUnit.MINUTES.between(dateTime, dateTime2);
     long diffInHours = ChronoUnit.HOURS.between(dateTime, dateTime2);
 }

2.3 java.time.Duration示例了解毫秒/秒/分钟等的差异

Java 程序使用Duration类来获取以毫秒为单位的两个日期之间的

public void difference_between_two_dates_duration()
 {
     LocalDateTime dateTime = LocalDateTime.of(1988, 7, 4, 0, 0);
     LocalDateTime dateTime2 = LocalDateTime.now();
    int diffInNano = java.time.Duration.between(dateTime, dateTime2).getNano();
     long diffInSeconds = java.time.Duration.between(dateTime, dateTime2).getSeconds();
     long diffInMilli = java.time.Duration.between(dateTime, dateTime2).toMillis();
     long diffInMinutes = java.time.Duration.between(dateTime, dateTime2).toMinutes();
     long diffInHours = java.time.Duration.between(dateTime, dateTime2).toHours();
 }

最重要的是,这三种方式都具有足够的可读性和灵活性,可以知道多个时间单位之间的日期差异。 可以随意在用例中使用以上程序,以计算 Java 中两个日期之间的天数。

学习愉快!