This is an automated email from the ASF dual-hosted git repository. lukaszlenart pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/struts.git
The following commit(s) were added to refs/heads/main by this push: new 0d2d11071 WW-5530 make DateConverter work for LocalDate and LocalTime (#1223) 0d2d11071 is described below commit 0d2d11071bb0ff8c7e0ec19c85260df42823fc51 Author: bill-humblcloud <bill@humbl.cloud> AuthorDate: Wed Feb 26 02:29:36 2025 -0500 WW-5530 make DateConverter work for LocalDate and LocalTime (#1223) * make DateConverter work for LocalDate and LocalTime * add date tests --- .../conversion/impl/XWorkBasicConverter.java | 6 +++++ .../conversion/impl/XWorkConverterTest.java | 27 ++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/core/src/main/java/org/apache/struts2/conversion/impl/XWorkBasicConverter.java b/core/src/main/java/org/apache/struts2/conversion/impl/XWorkBasicConverter.java index c270a4bcd..281e36380 100644 --- a/core/src/main/java/org/apache/struts2/conversion/impl/XWorkBasicConverter.java +++ b/core/src/main/java/org/apache/struts2/conversion/impl/XWorkBasicConverter.java @@ -25,7 +25,9 @@ import org.apache.struts2.StrutsConstants; import org.apache.struts2.conversion.TypeConversionException; import java.lang.reflect.Member; +import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.Calendar; import java.util.Collection; import java.util.Date; @@ -100,8 +102,12 @@ public class XWorkBasicConverter extends DefaultTypeConverter { result = doConvertToArray(context, o, member, propertyName, value, toType); } else if (Date.class.isAssignableFrom(toType)) { result = doConvertToDate(context, value, toType); + } else if (LocalDate.class.isAssignableFrom(toType)) { + result = doConvertToDate(context, value, toType); } else if (LocalDateTime.class.isAssignableFrom(toType)) { result = doConvertToDate(context, value, toType); + } else if (LocalTime.class.isAssignableFrom(toType)) { + result = doConvertToDate(context, value, toType); } else if (Calendar.class.isAssignableFrom(toType)) { result = doConvertToCalendar(context, value); } else if (Collection.class.isAssignableFrom(toType)) { diff --git a/core/src/test/java/org/apache/struts2/conversion/impl/XWorkConverterTest.java b/core/src/test/java/org/apache/struts2/conversion/impl/XWorkConverterTest.java index bdf2a2365..256d9b231 100644 --- a/core/src/test/java/org/apache/struts2/conversion/impl/XWorkConverterTest.java +++ b/core/src/test/java/org/apache/struts2/conversion/impl/XWorkConverterTest.java @@ -50,6 +50,10 @@ import java.util.*; import static org.junit.Assert.assertArrayEquals; +import java.time.format.DateTimeFormatter; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.Date; import java.util.Set; @@ -100,6 +104,29 @@ public class XWorkConverterTest extends XWorkTestCase { Date dateRfc3339DateOnly = (Date) converter.convertValue(context, null, null, null, "2001-01-10", Date.class); assertEquals(date, dateRfc3339DateOnly); + + // java.time library tests + DateTimeFormatter formatterDate = DateTimeFormatter.ofPattern("MM/dd/yyyy"); + LocalDate localDate = LocalDate.parse("01/10/2001", formatterDate); + + DateTimeFormatter formatterDateTime = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"); + LocalDateTime localDateTime = LocalDateTime.parse("2001-01-10T10:11:12", formatterDateTime); + + DateTimeFormatter formatterTime = DateTimeFormatter.ofPattern("HH:mm:ss"); + LocalTime localTime = LocalTime.parse("10:11:12", formatterTime); + + String localDateStr = (String) converter.convertValue(context, null, null, null, localDate, String.class); + String localDateTimeStr = (String) converter.convertValue(context, null, null, null, localDateTime, String.class); + String localTimeStr = (String) converter.convertValue(context, null, null, null, localTime, String.class); + + LocalDate localDate2 = (LocalDate) converter.convertValue(context, null, null, null, localDateStr, LocalDate.class); + assertEquals(localDate, localDate2); + + LocalDateTime localDateTime2 = (LocalDateTime) converter.convertValue(context, null, null, null, localDateTimeStr, LocalDateTime.class); + assertEquals(localDateTime, localDateTime2); + + LocalTime localTime2 = (LocalTime) converter.convertValue(context, null, null, null, localTimeStr, LocalTime.class); + assertEquals(localTime, localTime2); } public void testDateConversionWithDefault() throws ParseException {