package com.levelup.java.date; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyLong; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.Month; import java.time.Period; import java.time.temporal.ChronoUnit; import org.apache.log4j.Logger; import org.joda.time.DateTime; import org.joda.time.Days; import org.joda.time.Duration; import org.joda.time.Hours; import org.joda.time.Minutes; import org.joda.time.Seconds; import org.joda.time.chrono.GregorianChronology; import org.junit.Test; /** * This java example will demonstrate finding the difference between two dates. * * @author Justin Musgrove * @see <a href='http://www.leveluplunch.com/java/examples/calculate-time-difference/'>Calculate time differnece</a> * */ public class CalculateDateTimeDifference { private static final Logger logger = Logger.getLogger(CalculateDateTimeDifference.class); @Test public void difference_between_two_dates_java () { // not recommended, use JODA or java 8 time } @Test public void difference_between_two_dates_java8_period() { LocalDate sinceGraduation = LocalDate.of(1984, Month.JUNE, 4); LocalDate currentDate = LocalDate.now(); Period betweenDates = Period.between(sinceGraduation, currentDate); int diffInDays = betweenDates.getDays(); int diffInMonths = betweenDates.getMonths(); int diffInYears = betweenDates.getYears(); logger.info(diffInDays); logger.info(diffInMonths); logger.info(diffInYears); assertTrue(diffInDays >= anyInt()); assertTrue(diffInMonths >= anyInt()); assertTrue(diffInYears >= anyInt()); } @Test public void difference_between_two_dates_java8_chrono_period() { LocalDate sinceGraduation = LocalDate.of(1984, Month.JUNE, 4); LocalDate currentDate = LocalDate.now(); long diffInDays = ChronoUnit.DAYS.between(sinceGraduation, currentDate); long diffInMonths = ChronoUnit.MONTHS.between(sinceGraduation, currentDate); long diffInYears = ChronoUnit.YEARS.between(sinceGraduation, currentDate); logger.info(diffInDays); logger.info(diffInMonths); logger.info(diffInYears); assertTrue(diffInDays >= anyLong()); assertTrue(diffInMonths >= anyLong()); assertTrue(diffInYears >= anyLong()); } @Test public void difference_between_two_dates_java8_duration() { LocalDateTime dateTime = LocalDateTime.of(1984, 6, 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(); logger.info(diffInNano); logger.info(diffInSeconds); logger.info(diffInMilli); logger.info(diffInMinutes); logger.info(diffInHours); assertTrue(diffInNano >= anyLong()); assertTrue(diffInSeconds >= anyLong()); assertTrue(diffInMilli >= anyLong()); assertTrue(diffInMinutes >= anyLong()); assertTrue(diffInHours >= anyLong()); } @Test public void difference_between_two_dates_java8_chrono_duration() { LocalDateTime dateTime = LocalDateTime.of(1984, 6, 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); logger.info(diffInNano); logger.info(diffInSeconds); logger.info(diffInMilli); logger.info(diffInMinutes); logger.info(diffInHours); assertTrue(diffInNano >= anyLong()); assertTrue(diffInSeconds >= anyLong()); assertTrue(diffInMilli >= anyLong()); assertTrue(diffInMinutes >= anyLong()); assertTrue(diffInHours >= anyLong()); } @Test public void difference_between_two_dates_joda () { DateTime sinceGraduation = new DateTime(1984, 6, 4, 0, 0, GregorianChronology.getInstance()); DateTime currentDate = new DateTime(); //current date Days diffInDays = Days.daysBetween(sinceGraduation, currentDate); Hours diffInHours = Hours.hoursBetween(sinceGraduation, currentDate); Minutes diffInMinutes = Minutes.minutesBetween(sinceGraduation, currentDate); Seconds seconds = Seconds.secondsBetween(sinceGraduation, currentDate); logger.info(diffInDays.getDays()); logger.info(diffInHours.getHours()); logger.info(diffInMinutes.getMinutes()); logger.info(seconds.getSeconds()); assertTrue(diffInDays.getDays() >= 10697); assertTrue(diffInHours.getHours() >= 256747); assertTrue(diffInMinutes.getMinutes() >= 15404876); assertTrue(seconds.getSeconds() >= 924292577); } @Test public void difference_between_two_dates_joda_duration () { DateTime sinceGraduation = new DateTime(1984, 6, 4, 0, 0, GregorianChronology.getInstance()); DateTime currentDate = new DateTime(); //current date Duration duration = new Duration(sinceGraduation, currentDate); logger.info(duration.getStandardDays()); logger.info(duration.getStandardHours()); logger.info(duration.getStandardMinutes()); logger.info(duration.getStandardSeconds()); assertTrue(duration.getStandardDays() >= 10697); assertTrue(duration.getStandardHours() >= 256747); assertTrue(duration.getStandardMinutes() >= 15404876); assertTrue(duration.getStandardSeconds() >= 924292577); } }