From 5eae4e7df89d102d635a06d25395c8c5e98d68a0 Mon Sep 17 00:00:00 2001 From: Rajat Garg Date: Tue, 30 Jan 2024 00:06:37 +0530 Subject: [PATCH] Convert String date to XMLGregorianCalendar (#15756) Co-authored-by: rajatgarg --- ...ngDateToXMLGregorianCalendarConverter.java | 42 +++++++++++++ ...XMLGregorianCalendarConverterUnitTest.java | 63 +++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 core-java-modules/core-java-datetime-conversion-2/src/main/java/com/baeldung/stringdatetoxmlgregoriancalendar/StringDateToXMLGregorianCalendarConverter.java create mode 100644 core-java-modules/core-java-datetime-conversion-2/src/test/java/com/baeldung/stringdatetoxmlgregoriancalendar/StringDateToXMLGregorianCalendarConverterUnitTest.java diff --git a/core-java-modules/core-java-datetime-conversion-2/src/main/java/com/baeldung/stringdatetoxmlgregoriancalendar/StringDateToXMLGregorianCalendarConverter.java b/core-java-modules/core-java-datetime-conversion-2/src/main/java/com/baeldung/stringdatetoxmlgregoriancalendar/StringDateToXMLGregorianCalendarConverter.java new file mode 100644 index 0000000000..2ec1efecd0 --- /dev/null +++ b/core-java-modules/core-java-datetime-conversion-2/src/main/java/com/baeldung/stringdatetoxmlgregoriancalendar/StringDateToXMLGregorianCalendarConverter.java @@ -0,0 +1,42 @@ +package com.baeldung.stringdatetoxmlgregoriancalendar; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.util.Date; +import java.util.GregorianCalendar; + +import javax.xml.datatype.DatatypeConfigurationException; +import javax.xml.datatype.DatatypeFactory; +import javax.xml.datatype.XMLGregorianCalendar; + +import org.joda.time.DateTime; +import org.joda.time.format.DateTimeFormat; + +public class StringDateToXMLGregorianCalendarConverter { + public static XMLGregorianCalendar usingDatatypeFactoryForDate(String dateAsString) throws DatatypeConfigurationException { + return DatatypeFactory.newInstance().newXMLGregorianCalendar(dateAsString); + } + + public static XMLGregorianCalendar usingLocalDate(String dateAsString) throws DatatypeConfigurationException { + LocalDate localDate = LocalDate.parse(dateAsString); + return DatatypeFactory.newInstance().newXMLGregorianCalendar(localDate.toString()); + } + + public static XMLGregorianCalendar usingSimpleDateFormat(String dateTimeAsString) throws DatatypeConfigurationException, ParseException { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); + Date date = simpleDateFormat.parse(dateTimeAsString); + return DatatypeFactory.newInstance().newXMLGregorianCalendar(simpleDateFormat.format(date)); + } + + public static XMLGregorianCalendar usingGregorianCalendar(String dateTimeAsString) throws DatatypeConfigurationException, ParseException { + GregorianCalendar calendar = new GregorianCalendar(); + calendar.setTime(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").parse(dateTimeAsString)); + return DatatypeFactory.newInstance().newXMLGregorianCalendar(calendar); + } + + public static XMLGregorianCalendar usingJodaTime(String dateTimeAsString) throws DatatypeConfigurationException { + DateTime dateTime = DateTime.parse(dateTimeAsString, DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss")); + return DatatypeFactory.newInstance().newXMLGregorianCalendar(dateTime.toGregorianCalendar()); + } +} diff --git a/core-java-modules/core-java-datetime-conversion-2/src/test/java/com/baeldung/stringdatetoxmlgregoriancalendar/StringDateToXMLGregorianCalendarConverterUnitTest.java b/core-java-modules/core-java-datetime-conversion-2/src/test/java/com/baeldung/stringdatetoxmlgregoriancalendar/StringDateToXMLGregorianCalendarConverterUnitTest.java new file mode 100644 index 0000000000..b3c15a3fd4 --- /dev/null +++ b/core-java-modules/core-java-datetime-conversion-2/src/test/java/com/baeldung/stringdatetoxmlgregoriancalendar/StringDateToXMLGregorianCalendarConverterUnitTest.java @@ -0,0 +1,63 @@ +package com.baeldung.stringdatetoxmlgregoriancalendar; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.text.ParseException; +import javax.xml.datatype.DatatypeConfigurationException; +import javax.xml.datatype.XMLGregorianCalendar; + +import org.junit.jupiter.api.Test; + +public class StringDateToXMLGregorianCalendarConverterUnitTest { + private static final String dateAsString = "2014-04-24"; + private static final String dateTimeAsString = "2014-04-24T15:45:30"; + + @Test + void givenStringDate_whenUsingDatatypeFactory_thenConvertToXMLGregorianCalendar() throws DatatypeConfigurationException { + XMLGregorianCalendar xmlGregorianCalendar = StringDateToXMLGregorianCalendarConverter.usingDatatypeFactoryForDate(dateAsString); + assertEquals(24,xmlGregorianCalendar.getDay()); + assertEquals(4,xmlGregorianCalendar.getMonth()); + assertEquals(2014,xmlGregorianCalendar.getYear()); + } + + @Test + void givenStringDateTime_whenUsingApacheCommonsLang3_thenConvertToXMLGregorianCalendar() throws DatatypeConfigurationException { + XMLGregorianCalendar xmlGregorianCalendar = StringDateToXMLGregorianCalendarConverter.usingLocalDate(dateAsString); + assertEquals(24,xmlGregorianCalendar.getDay()); + assertEquals(4,xmlGregorianCalendar.getMonth()); + assertEquals(2014,xmlGregorianCalendar.getYear()); + } + + @Test + void givenStringDateTime_whenUsingSimpleDateFormat_thenConvertToXMLGregorianCalendar() throws DatatypeConfigurationException, ParseException { + XMLGregorianCalendar xmlGregorianCalendar = StringDateToXMLGregorianCalendarConverter.usingSimpleDateFormat(dateTimeAsString); + assertEquals(24,xmlGregorianCalendar.getDay()); + assertEquals(4,xmlGregorianCalendar.getMonth()); + assertEquals(2014,xmlGregorianCalendar.getYear()); + assertEquals(15,xmlGregorianCalendar.getHour()); + assertEquals(45,xmlGregorianCalendar.getMinute()); + assertEquals(30,xmlGregorianCalendar.getSecond()); + } + + @Test + void givenStringDateTime_whenUsingGregorianCalendar_thenConvertToXMLGregorianCalendar() throws DatatypeConfigurationException, ParseException { + XMLGregorianCalendar xmlGregorianCalendar = StringDateToXMLGregorianCalendarConverter.usingGregorianCalendar(dateTimeAsString); + assertEquals(24,xmlGregorianCalendar.getDay()); + assertEquals(4,xmlGregorianCalendar.getMonth()); + assertEquals(2014,xmlGregorianCalendar.getYear()); + assertEquals(15,xmlGregorianCalendar.getHour()); + assertEquals(45,xmlGregorianCalendar.getMinute()); + assertEquals(30,xmlGregorianCalendar.getSecond()); + } + + @Test + void givenStringDateTime_whenUsingJodaTime_thenConvertToXMLGregorianCalendar() throws DatatypeConfigurationException { + XMLGregorianCalendar xmlGregorianCalendar = StringDateToXMLGregorianCalendarConverter.usingJodaTime(dateTimeAsString); + assertEquals(24,xmlGregorianCalendar.getDay()); + assertEquals(4,xmlGregorianCalendar.getMonth()); + assertEquals(2014,xmlGregorianCalendar.getYear()); + assertEquals(15,xmlGregorianCalendar.getHour()); + assertEquals(45,xmlGregorianCalendar.getMinute()); + assertEquals(30,xmlGregorianCalendar.getSecond()); + } +}