From 52c96522c1fe23476f4cf9dc89de153d45ee8a16 Mon Sep 17 00:00:00 2001 From: anujgaud <146576725+anujgaud@users.noreply.github.com> Date: Sat, 18 Nov 2023 00:24:38 +0530 Subject: [PATCH 01/12] Add Code for converting LocalDate to ISO 8601 --- .../localdatetoiso/LocalDateToISO.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/localdatetoiso/LocalDateToISO.java diff --git a/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/localdatetoiso/LocalDateToISO.java b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/localdatetoiso/LocalDateToISO.java new file mode 100644 index 0000000000..7ef5c9bf56 --- /dev/null +++ b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/localdatetoiso/LocalDateToISO.java @@ -0,0 +1,25 @@ +package com.baeldung.localDateToISO; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.util.Date; + +import org.apache.commons.lang3.time.DateFormatUtils; + +public class LocalDateToISO { + public String formatUsingDateTimeFormatter(LocalDate localDate) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssX"); + String formattedDate = localDate.atStartOfDay().atOffset(ZoneOffset.UTC).format(formatter); + return formattedDate; + } + + public String formatUsingSimpleDateFormat(LocalDate date) { + Date utilDate = Date.from(date.atStartOfDay(ZoneOffset.UTC).toInstant()); + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX"); + String formattedDate = dateFormat.format(utilDate); + return formattedDate; + } +} From eaf6ce5fbe54cbdaeaf36772b760474faab60407 Mon Sep 17 00:00:00 2001 From: anujgaud <146576725+anujgaud@users.noreply.github.com> Date: Sat, 18 Nov 2023 00:27:03 +0530 Subject: [PATCH 02/12] Add unit tests for LocalDate to ISO 8601 --- .../LocalDateToISOUnitTest.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java diff --git a/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java b/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java new file mode 100644 index 0000000000..994d0ea356 --- /dev/null +++ b/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java @@ -0,0 +1,28 @@ +package com.baeldung.localDateToISO; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import java.time.LocalDate; + +public class LocalDateToISOUnitTest { + @Test + public void givenLocalDate_whenUsingDateTimeFormatterThenISOFormat(){ + LocalDateToISO localDateToISO = new LocalDateToISO(); + LocalDate localDate = LocalDate.of(2023, 11, 6); + + String expected = "2023-11-06T00:00:00Z"; + String actual = localDateToISO.formatUsingDateTimeFormatter(localDate); + assertEquals(expected, actual); + } + + @Test + public void givenLocalDate_whenUsingSimpleDateFormatThenISOFormat(){ + LocalDateToISO localDateToISO = new LocalDateToISO(); + LocalDate localDate = LocalDate.of(2023, 11, 6); + + String expected = "2023-11-06T00:00:00Z"; + String actual = localDateToISO.formatUsingSimpleDateFormat(localDate); + assertEquals(expected, actual); + } +} From 293322e3a3bc1038021d8ab0c319f19b77c0041f Mon Sep 17 00:00:00 2001 From: anujgaud <146576725+anujgaud@users.noreply.github.com> Date: Sat, 18 Nov 2023 00:58:52 +0530 Subject: [PATCH 03/12] Add Joda library support --- .../com/baeldung/localdatetoiso/LocalDateToISO.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/localdatetoiso/LocalDateToISO.java b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/localdatetoiso/LocalDateToISO.java index 7ef5c9bf56..969006a720 100644 --- a/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/localdatetoiso/LocalDateToISO.java +++ b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/localdatetoiso/LocalDateToISO.java @@ -9,6 +9,10 @@ import java.util.Date; import org.apache.commons.lang3.time.DateFormatUtils; +import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; +import org.joda.time.format.DateTimeFormat; + public class LocalDateToISO { public String formatUsingDateTimeFormatter(LocalDate localDate) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssX"); @@ -22,4 +26,11 @@ public class LocalDateToISO { String formattedDate = dateFormat.format(utilDate); return formattedDate; } + + public String formatUsingJodaTime(org.joda.time.LocalDate localDate) { + DateTime dateTime = localDate.toDateTimeAtStartOfDay(DateTimeZone.UTC); + org.joda.time.format.DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss'Z'"); + String formattedDate = formatter.print(localDate); + return formattedDate; + } } From dd89145547200ff4b48bf7198e5bec743e6b0b83 Mon Sep 17 00:00:00 2001 From: anujgaud <146576725+anujgaud@users.noreply.github.com> Date: Sat, 18 Nov 2023 00:59:55 +0530 Subject: [PATCH 04/12] Add unit test for JodaTime method --- .../localdatetoiso/LocalDateToISOUnitTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java b/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java index 994d0ea356..077c7ca858 100644 --- a/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java +++ b/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java @@ -25,4 +25,14 @@ public class LocalDateToISOUnitTest { String actual = localDateToISO.formatUsingSimpleDateFormat(localDate); assertEquals(expected, actual); } + + @Test + public void givenLocalDate_whenUsingJodaTimeThenISOFormat() { + LocalDateToISO localDateToISO = new LocalDateToISO(); + org.joda.time.LocalDate localDate = new org.joda.time.LocalDate(2023, 11, 6); + + String expected = "2023-11-06T00:00:00Z"; + String actual = localDateToISO.formatUsingJodaTime(localDate); + assertEquals(expected, actual); + } } From fcc9c4c6ce83adcb43fa2b12abb17c29994c7b85 Mon Sep 17 00:00:00 2001 From: anujgaud <146576725+anujgaud@users.noreply.github.com> Date: Wed, 29 Nov 2023 01:49:35 +0530 Subject: [PATCH 05/12] Add milliseconds --- .../com/baeldung/localdatetoiso/LocalDateToISO.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/localdatetoiso/LocalDateToISO.java b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/localdatetoiso/LocalDateToISO.java index 969006a720..a04d554d5a 100644 --- a/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/localdatetoiso/LocalDateToISO.java +++ b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/localdatetoiso/LocalDateToISO.java @@ -12,25 +12,24 @@ import org.apache.commons.lang3.time.DateFormatUtils; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.ISODateTimeFormat; public class LocalDateToISO { public String formatUsingDateTimeFormatter(LocalDate localDate) { - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssX"); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX"); String formattedDate = localDate.atStartOfDay().atOffset(ZoneOffset.UTC).format(formatter); return formattedDate; } public String formatUsingSimpleDateFormat(LocalDate date) { Date utilDate = Date.from(date.atStartOfDay(ZoneOffset.UTC).toInstant()); - DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX"); + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX"); String formattedDate = dateFormat.format(utilDate); return formattedDate; } public String formatUsingJodaTime(org.joda.time.LocalDate localDate) { - DateTime dateTime = localDate.toDateTimeAtStartOfDay(DateTimeZone.UTC); - org.joda.time.format.DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss'Z'"); - String formattedDate = formatter.print(localDate); - return formattedDate; + org.joda.time.format.DateTimeFormatter formatter = ISODateTimeFormat.dateTime(); + return formatter.print(localDate.toDateTimeAtStartOfDay(DateTimeZone.UTC)); } } From ecba15ffb748457103ca69985a2221e4450d33d9 Mon Sep 17 00:00:00 2001 From: anujgaud <146576725+anujgaud@users.noreply.github.com> Date: Wed, 29 Nov 2023 01:51:58 +0530 Subject: [PATCH 06/12] Update tests --- .../com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java b/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java index 077c7ca858..7e45f4cba1 100644 --- a/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java +++ b/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java @@ -11,7 +11,7 @@ public class LocalDateToISOUnitTest { LocalDateToISO localDateToISO = new LocalDateToISO(); LocalDate localDate = LocalDate.of(2023, 11, 6); - String expected = "2023-11-06T00:00:00Z"; + String expected = "2023-11-06T00:00:00.000Z"; String actual = localDateToISO.formatUsingDateTimeFormatter(localDate); assertEquals(expected, actual); } @@ -21,7 +21,7 @@ public class LocalDateToISOUnitTest { LocalDateToISO localDateToISO = new LocalDateToISO(); LocalDate localDate = LocalDate.of(2023, 11, 6); - String expected = "2023-11-06T00:00:00Z"; + String expected = "2023-11-06T00:00:00.000Z"; String actual = localDateToISO.formatUsingSimpleDateFormat(localDate); assertEquals(expected, actual); } @@ -31,7 +31,7 @@ public class LocalDateToISOUnitTest { LocalDateToISO localDateToISO = new LocalDateToISO(); org.joda.time.LocalDate localDate = new org.joda.time.LocalDate(2023, 11, 6); - String expected = "2023-11-06T00:00:00Z"; + String expected = "2023-11-06T00:00:00.000Z"; String actual = localDateToISO.formatUsingJodaTime(localDate); assertEquals(expected, actual); } From 118195d99689ea24033eddad68584da4b4ad2de1 Mon Sep 17 00:00:00 2001 From: anujgaud <146576725+anujgaud@users.noreply.github.com> Date: Wed, 29 Nov 2023 01:56:50 +0530 Subject: [PATCH 07/12] Add Apache Commons Lang support --- .../java/com/baeldung/localdatetoiso/LocalDateToISO.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/localdatetoiso/LocalDateToISO.java b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/localdatetoiso/LocalDateToISO.java index a04d554d5a..a62be336ca 100644 --- a/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/localdatetoiso/LocalDateToISO.java +++ b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/localdatetoiso/LocalDateToISO.java @@ -14,6 +14,8 @@ import org.joda.time.DateTimeZone; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.ISODateTimeFormat; +import org.apache.commons.lang3.time.FastDateFormat; + public class LocalDateToISO { public String formatUsingDateTimeFormatter(LocalDate localDate) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX"); @@ -32,4 +34,11 @@ public class LocalDateToISO { org.joda.time.format.DateTimeFormatter formatter = ISODateTimeFormat.dateTime(); return formatter.print(localDate.toDateTimeAtStartOfDay(DateTimeZone.UTC)); } + + public String formatUsingApacheCommonsLang(LocalDate localDate) { + Date date = Date.from(localDate.atStartOfDay().toInstant(ZoneOffset.UTC)); + String formattedDate = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss.sss'Z'", TimeZone.getTimeZone("UTC")) + .format(date); + return formattedDate; + } } From 677f4277f23e4a2d1b4003d6f68db0e20456023a Mon Sep 17 00:00:00 2001 From: anujgaud <146576725+anujgaud@users.noreply.github.com> Date: Wed, 29 Nov 2023 01:57:30 +0530 Subject: [PATCH 08/12] Add Unit test for commons Lang --- .../localdatetoiso/LocalDateToISOUnitTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java b/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java index 7e45f4cba1..c8a77d3e39 100644 --- a/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java +++ b/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java @@ -35,4 +35,14 @@ public class LocalDateToISOUnitTest { String actual = localDateToISO.formatUsingJodaTime(localDate); assertEquals(expected, actual); } + + @Test + public void givenLocalDate_whenUsingApacheCommonsLangThenISOFormat() { + LocalDateToISO localDateToISO = new LocalDateToISO(); + LocalDate localDate = LocalDate.of(2023, 11, 6); + + String expected = "2023-11-06T00:00:00.000Z"; + String actual = localDateToISO.formatUsingApacheCommonsLang(localDate); + assertEquals(expected, actual); + } } From b55f4db54907227aaead6a856c003e666f4340ec Mon Sep 17 00:00:00 2001 From: anujgaud <146576725+anujgaud@users.noreply.github.com> Date: Mon, 4 Dec 2023 23:15:47 +0530 Subject: [PATCH 09/12] Fix package name --- .../main/java/com/baeldung/localdatetoiso/LocalDateToISO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/localdatetoiso/LocalDateToISO.java b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/localdatetoiso/LocalDateToISO.java index a62be336ca..e09d823ce4 100644 --- a/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/localdatetoiso/LocalDateToISO.java +++ b/core-java-modules/core-java-8-datetime-2/src/main/java/com/baeldung/localdatetoiso/LocalDateToISO.java @@ -1,4 +1,4 @@ -package com.baeldung.localDateToISO; +package com.baeldung.localdatetoiso; import java.text.DateFormat; import java.text.SimpleDateFormat; From 89db04b79bc22a00b7e0a7ed5fdfd0f399946624 Mon Sep 17 00:00:00 2001 From: anujgaud <146576725+anujgaud@users.noreply.github.com> Date: Mon, 4 Dec 2023 23:17:06 +0530 Subject: [PATCH 10/12] Fix Package name --- .../com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java b/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java index c8a77d3e39..28378c61fc 100644 --- a/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java +++ b/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.localDateToISO; +package com.baeldung.localdatetoiso; import static org.junit.Assert.assertEquals; From d660f1b8fe00fa0ffe9d532876a35cbfebb4aafe Mon Sep 17 00:00:00 2001 From: anujgaud <146576725+anujgaud@users.noreply.github.com> Date: Mon, 4 Dec 2023 23:21:46 +0530 Subject: [PATCH 11/12] Append _ before then --- .../baeldung/localdatetoiso/LocalDateToISOUnitTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java b/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java index 28378c61fc..06b25c8e44 100644 --- a/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java +++ b/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java @@ -7,7 +7,7 @@ import java.time.LocalDate; public class LocalDateToISOUnitTest { @Test - public void givenLocalDate_whenUsingDateTimeFormatterThenISOFormat(){ + public void givenLocalDate_whenUsingDateTimeFormatter_thenISOFormat(){ LocalDateToISO localDateToISO = new LocalDateToISO(); LocalDate localDate = LocalDate.of(2023, 11, 6); @@ -17,7 +17,7 @@ public class LocalDateToISOUnitTest { } @Test - public void givenLocalDate_whenUsingSimpleDateFormatThenISOFormat(){ + public void givenLocalDate_whenUsingSimpleDateFormat_thenISOFormat(){ LocalDateToISO localDateToISO = new LocalDateToISO(); LocalDate localDate = LocalDate.of(2023, 11, 6); @@ -27,7 +27,7 @@ public class LocalDateToISOUnitTest { } @Test - public void givenLocalDate_whenUsingJodaTimeThenISOFormat() { + public void givenLocalDate_whenUsingJodaTime_thenISOFormat() { LocalDateToISO localDateToISO = new LocalDateToISO(); org.joda.time.LocalDate localDate = new org.joda.time.LocalDate(2023, 11, 6); @@ -37,7 +37,7 @@ public class LocalDateToISOUnitTest { } @Test - public void givenLocalDate_whenUsingApacheCommonsLangThenISOFormat() { + public void givenLocalDate_whenUsingApacheCommonsLang_thenISOFormat() { LocalDateToISO localDateToISO = new LocalDateToISO(); LocalDate localDate = LocalDate.of(2023, 11, 6); From a662ef5fa69d2bade3ca876f9538a62d2f0babe9 Mon Sep 17 00:00:00 2001 From: anujgaud <146576725+anujgaud@users.noreply.github.com> Date: Tue, 5 Dec 2023 18:31:21 +0530 Subject: [PATCH 12/12] Address review comments --- .../baeldung/localdatetoiso/LocalDateToISOUnitTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java b/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java index 06b25c8e44..1979c91eca 100644 --- a/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java +++ b/core-java-modules/core-java-8-datetime-2/src/test/java/com/baeldung/localdatetoiso/LocalDateToISOUnitTest.java @@ -7,7 +7,7 @@ import java.time.LocalDate; public class LocalDateToISOUnitTest { @Test - public void givenLocalDate_whenUsingDateTimeFormatter_thenISOFormat(){ + void givenLocalDate_whenUsingDateTimeFormatter_thenISOFormat(){ LocalDateToISO localDateToISO = new LocalDateToISO(); LocalDate localDate = LocalDate.of(2023, 11, 6); @@ -17,7 +17,7 @@ public class LocalDateToISOUnitTest { } @Test - public void givenLocalDate_whenUsingSimpleDateFormat_thenISOFormat(){ + void givenLocalDate_whenUsingSimpleDateFormat_thenISOFormat(){ LocalDateToISO localDateToISO = new LocalDateToISO(); LocalDate localDate = LocalDate.of(2023, 11, 6); @@ -27,7 +27,7 @@ public class LocalDateToISOUnitTest { } @Test - public void givenLocalDate_whenUsingJodaTime_thenISOFormat() { + void givenLocalDate_whenUsingJodaTime_thenISOFormat() { LocalDateToISO localDateToISO = new LocalDateToISO(); org.joda.time.LocalDate localDate = new org.joda.time.LocalDate(2023, 11, 6); @@ -37,7 +37,7 @@ public class LocalDateToISOUnitTest { } @Test - public void givenLocalDate_whenUsingApacheCommonsLang_thenISOFormat() { + void givenLocalDate_whenUsingApacheCommonsLang_thenISOFormat() { LocalDateToISO localDateToISO = new LocalDateToISO(); LocalDate localDate = LocalDate.of(2023, 11, 6);