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 {

Reply via email to