In Java 8, we can use Period, Duration or ChronoUnit to calculate the difference between two LocalDate or LocaldateTime.
Periodto calculate the difference between twoLocalDate.Durationto calculate the difference between twoLocalDateTime.ChronoUnitfor everything.
1. Period
JavaLocalDate.java
package com.mkyong.java8;
import java.time.LocalDate;
import java.time.Period;
public class JavaLocalDate {
public static void main(String[] args) {
LocalDate from = LocalDate.of(2020, 5, 4);
LocalDate to = LocalDate.of(2020, 10, 10);
Period period = Period.between(from, to);
System.out.print(period.getYears() + " years,");
System.out.print(period.getMonths() + " months,");
System.out.print(period.getDays() + " days");
}
}
Output
0 years,5 months,6 days
2. Duration
JavaLocalDateTime.java
package com.mkyong.java8;
import java.time.Duration;
import java.time.LocalDateTime;
public class JavaLocalDateTime {
public static void main(String[] args) {
LocalDateTime from = LocalDateTime.of(2020, 10, 4,
10, 20, 55);
LocalDateTime to = LocalDateTime.of(2020, 10, 10,
10, 21, 1);
Duration duration = Duration.between(from, to);
// days between from and to
System.out.println(duration.toDays() + " days");
// hours between from and to
System.out.println(duration.toHours() + " hours");
// minutes between from and to
System.out.println(duration.toMinutes() + " minutes");
// seconds between from and to
System.out.println(duration.toSeconds() + " seconds");
System.out.println(duration.getSeconds() + " seconds");
}
}
Output
6 days
144 hours
8640 minutes
518406 seconds
518406 seconds
3. ChronoUnit
JavaChronoUnit.java
package com.mkyong.java8;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
public class JavaChronoUnit {
public static void main(String[] args) {
LocalDateTime from = LocalDateTime.of(2020, 10, 4,
10, 20, 55);
LocalDateTime to = LocalDateTime.of(2020, 11, 10,
10, 21, 1);
long years = ChronoUnit.YEARS.between(from, to);
long months = ChronoUnit.MONTHS.between(from, to);
long weeks = ChronoUnit.WEEKS.between(from, to);
long days = ChronoUnit.DAYS.between(from, to);
long hours = ChronoUnit.HOURS.between(from, to);
long minutes = ChronoUnit.MINUTES.between(from, to);
long seconds = ChronoUnit.SECONDS.between(from, to);
long milliseconds = ChronoUnit.MILLIS.between(from, to);
long nano = ChronoUnit.NANOS.between(from, to);
System.out.println(years + " years");
System.out.println(months + " months");
System.out.println(weeks + " weeks");
System.out.println(days + " days");
System.out.println(hours + " hours");
System.out.println(minutes + " minutes");
System.out.println(seconds + " seconds");
System.out.println(milliseconds + " milliseconds");
System.out.println(nano + " nano");
}
}
Output
0 years
1 months
5 weeks
37 days
888 hours
53280 minutes
3196806 seconds
3196806000 milliseconds
3196806000000000 nano
How is it possible, if the methods between receive Temporal type?