WW-5530 make DateConverter work for LocalDate and LocalTime (#1223)

* make DateConverter work for LocalDate and LocalTime
* add date tests
This commit is contained in:
bill-humblcloud
2025-02-26 02:29:36 -05:00
committed by GitHub
parent 1100a34e9d
commit 0d2d11071b
2 changed files with 33 additions and 0 deletions
@@ -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)) {
@@ -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 {