diff --git a/core-java/README.md b/core-java/README.md index dabf6f39be..a4b5127e98 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -141,3 +141,6 @@ - [Guide to UUID in Java](http://www.baeldung.com/java-uuid) - [How to Get the Last Element of a Stream in Java?](http://www.baeldung.com/java-stream-last-element) - [Guide to Escaping Characters in Java RegExps](http://www.baeldung.com/java-regexp-escape-char) +- [Period and Duration in Java](http://www.baeldung.com/java-period-duration) +- [Introduction to the Java 8 Date/Time API](http://www.baeldung.com/java-8-date-time-intro) +- [Migrating to the New Java 8 Date Time API](http://www.baeldung.com/migrating-to-java-8-date-time-api) diff --git a/core-java/pom.xml b/core-java/pom.xml index 422965a0ed..586486027a 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -186,6 +186,16 @@ fscontext ${fscontext.version} + + joda-time + joda-time + ${joda-time.version} + + + com.darwinsys + hirondelle-date4j + ${hirondelle-date4j.version} + @@ -408,6 +418,8 @@ 1.8.7 1.16.12 4.6-b01 + 2.9.9 + 1.5.1 1.3 @@ -416,9 +428,9 @@ 3.6.1 1.7.0 + 3.6.0 2.19.1 - diff --git a/core-java/src/test/java/com/baeldung/DateDiffUnitTest.java b/core-java/src/test/java/com/baeldung/DateDiffUnitTest.java new file mode 100644 index 0000000000..40b7fac30d --- /dev/null +++ b/core-java/src/test/java/com/baeldung/DateDiffUnitTest.java @@ -0,0 +1,63 @@ +package com.baeldung; + +import org.joda.time.DateTime; +import org.junit.Test; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.Duration; +import java.time.ZonedDateTime; +import java.util.Date; +import java.util.Locale; +import java.util.TimeZone; +import java.util.concurrent.TimeUnit; + +import static org.junit.Assert.assertEquals; + +public class DateDiffUnitTest { + + @Test + public void givenTwoDatesBeforeJava8_whenDifferentiating_thenWeGetSix() throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH); + Date firstDate = sdf.parse("06/24/2017"); + Date secondDate = sdf.parse("06/30/2017"); + + long diffInMillies = Math.abs(secondDate.getTime() - firstDate.getTime()); + long diff = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS); + + assertEquals(diff, 6); + } + + @Test + public void givenTwoDatesInJava8_whenDifferentiating_thenWeGetSix() { + ZonedDateTime now = ZonedDateTime.now(); + ZonedDateTime sixDaysBehind = now.minusDays(6); + + Duration duration = Duration.between(now, sixDaysBehind); + long diff = Math.abs(duration.toDays()); + + assertEquals(diff, 6); + } + + @Test + public void givenTwoDatesInJodaTime_whenDifferentiating_thenWeGetSix() { + DateTime now = DateTime.now(); + DateTime sixDaysBehind = now.minusDays(6); + + org.joda.time.Duration duration = new org.joda.time.Duration(now, sixDaysBehind); + long diff = Math.abs(duration.getStandardDays()); + + assertEquals(diff, 6); + } + + @Test + public void givenTwoDatesInDate4j_whenDifferentiating_thenWeGetSix() { + hirondelle.date4j.DateTime now = hirondelle.date4j.DateTime.now(TimeZone.getDefault()); + hirondelle.date4j.DateTime sixDaysBehind = now.minusDays(6); + + long diff = Math.abs(now.numDaysFrom(sixDaysBehind)); + + assertEquals(diff, 6); + } + +} \ No newline at end of file diff --git a/java-difference-date/src/main/java/com/baeldung/DateDiff.java b/java-difference-date/src/main/java/com/baeldung/DateDiff.java deleted file mode 100644 index 08fc02fab7..0000000000 --- a/java-difference-date/src/main/java/com/baeldung/DateDiff.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.baeldung; - -import org.joda.time.DateTime; - -import java.time.Duration; -import java.time.ZonedDateTime; -import java.util.Date; -import java.util.concurrent.TimeUnit; - -public class DateDiff { - public long beforeJava8diff(Date firstDate, Date secondDate){ - long diffInMillies = Math.abs(secondDate.getTime() - firstDate.getTime()); - return TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS); - } - - public long fromJava8Diff(ZonedDateTime firstDate, ZonedDateTime secondDate){ - Duration duration = Duration.between(firstDate, secondDate); - return Math.abs(duration.toDays()); - } - - public long fromJodaTime(DateTime firstDate, DateTime secondDate){ - org.joda.time.Duration duration = new org.joda.time.Duration(firstDate, secondDate); - return Math.abs(duration.getStandardDays()); - } - - public long fromDate4j(hirondelle.date4j.DateTime firstDate, hirondelle.date4j.DateTime secondDate){ - long diff = firstDate.numDaysFrom(secondDate); - return Math.abs(diff); - } -} \ No newline at end of file diff --git a/java-difference-date/src/test/java/com/baeldung/DateDiffTest.java b/java-difference-date/src/test/java/com/baeldung/DateDiffTest.java index fe2b507cf3..4203f7ef38 100644 --- a/java-difference-date/src/test/java/com/baeldung/DateDiffTest.java +++ b/java-difference-date/src/test/java/com/baeldung/DateDiffTest.java @@ -5,55 +5,56 @@ import org.junit.Test; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.Duration; import java.time.ZonedDateTime; import java.util.Date; import java.util.Locale; import java.util.TimeZone; +import java.util.concurrent.TimeUnit; import static org.junit.Assert.assertEquals; public class DateDiffTest { @Test - public void givenTwoDatesBeforeJava8SeparatedBySixDays_whenCallingDiffOnThem_thenWeGetSix() throws ParseException { + public void givenTwoDatesBeforeJava8_whenDifferentiating_thenWeGetSix() throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH); Date firstDate = sdf.parse("06/24/2017"); Date secondDate = sdf.parse("06/30/2017"); - DateDiff dateDiff = new DateDiff(); - long diff = dateDiff.beforeJava8diff(firstDate, secondDate); + long diffInMillies = Math.abs(secondDate.getTime() - firstDate.getTime()); + long diff = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS); assertEquals(diff, 6); } @Test - public void givenTheCurrentDateAndSixDaysBehindInJava8_whenCallingDiffOnThem_thenWeGetSix() { + public void givenTwoDatesInJava8_whenDifferentiating_thenWeGetSix() { ZonedDateTime now = ZonedDateTime.now(); ZonedDateTime sixDaysBehind = now.minusDays(6); - DateDiff dateDiff = new DateDiff(); - long diff = dateDiff.fromJava8Diff(now, sixDaysBehind); + Duration duration = Duration.between(now, sixDaysBehind); + long diff = Math.abs(duration.toDays()); assertEquals(diff, 6); } @Test - public void givenTheCurrentDateAndSixDaysBehindInJodaTime_whenCallingDiffOnThem_thenWeGetSix() { + public void givenTwoDatesInJodaTime_whenDifferentiating_thenWeGetSix() { DateTime now = DateTime.now(); DateTime sixDaysBehind = now.minusDays(6); - DateDiff dateDiff = new DateDiff(); - long diff = dateDiff.fromJodaTime(now, sixDaysBehind); + org.joda.time.Duration duration = new org.joda.time.Duration(now, sixDaysBehind); + long diff = Math.abs(duration.getStandardDays()); assertEquals(diff, 6); } @Test - public void givenTheCurrentDateAndSixDaysBehindInDate4j_whenCallingDiffOnThem_thenWeGetSix() { + public void givenTwoDatesInDate4j_whenDifferentiating_thenWeGetSix() { hirondelle.date4j.DateTime now = hirondelle.date4j.DateTime.now(TimeZone.getDefault()); hirondelle.date4j.DateTime sixDaysBehind = now.minusDays(6); - DateDiff dateDiff = new DateDiff(); - long diff = dateDiff.fromDate4j(now, sixDaysBehind); + long diff = Math.abs(now.numDaysFrom(sixDaysBehind)); assertEquals(diff, 6); } diff --git a/pom.xml b/pom.xml index 40e7fda4a3..b5dee350ca 100644 --- a/pom.xml +++ b/pom.xml @@ -76,7 +76,6 @@ immutables jackson - java-difference-date vavr javax-servlets