Skip to content

Commit 0d2d110

Browse files
WW-5530 make DateConverter work for LocalDate and LocalTime (#1223)
* make DateConverter work for LocalDate and LocalTime * add date tests
1 parent 1100a34 commit 0d2d110

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

core/src/main/java/org/apache/struts2/conversion/impl/XWorkBasicConverter.java

+6
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
import org.apache.struts2.conversion.TypeConversionException;
2626

2727
import java.lang.reflect.Member;
28+
import java.time.LocalDate;
2829
import java.time.LocalDateTime;
30+
import java.time.LocalTime;
2931
import java.util.Calendar;
3032
import java.util.Collection;
3133
import java.util.Date;
@@ -100,8 +102,12 @@ public Object convertValue(Map<String, Object> context, Object o, Member member,
100102
result = doConvertToArray(context, o, member, propertyName, value, toType);
101103
} else if (Date.class.isAssignableFrom(toType)) {
102104
result = doConvertToDate(context, value, toType);
105+
} else if (LocalDate.class.isAssignableFrom(toType)) {
106+
result = doConvertToDate(context, value, toType);
103107
} else if (LocalDateTime.class.isAssignableFrom(toType)) {
104108
result = doConvertToDate(context, value, toType);
109+
} else if (LocalTime.class.isAssignableFrom(toType)) {
110+
result = doConvertToDate(context, value, toType);
105111
} else if (Calendar.class.isAssignableFrom(toType)) {
106112
result = doConvertToCalendar(context, value);
107113
} else if (Collection.class.isAssignableFrom(toType)) {

core/src/test/java/org/apache/struts2/conversion/impl/XWorkConverterTest.java

+27
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@
5050

5151
import static org.junit.Assert.assertArrayEquals;
5252

53+
import java.time.format.DateTimeFormatter;
54+
import java.time.LocalDate;
55+
import java.time.LocalDateTime;
56+
import java.time.LocalTime;
5357
import java.util.Date;
5458
import java.util.Set;
5559

@@ -100,6 +104,29 @@ public void testDateConversion() throws ParseException {
100104

101105
Date dateRfc3339DateOnly = (Date) converter.convertValue(context, null, null, null, "2001-01-10", Date.class);
102106
assertEquals(date, dateRfc3339DateOnly);
107+
108+
// java.time library tests
109+
DateTimeFormatter formatterDate = DateTimeFormatter.ofPattern("MM/dd/yyyy");
110+
LocalDate localDate = LocalDate.parse("01/10/2001", formatterDate);
111+
112+
DateTimeFormatter formatterDateTime = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
113+
LocalDateTime localDateTime = LocalDateTime.parse("2001-01-10T10:11:12", formatterDateTime);
114+
115+
DateTimeFormatter formatterTime = DateTimeFormatter.ofPattern("HH:mm:ss");
116+
LocalTime localTime = LocalTime.parse("10:11:12", formatterTime);
117+
118+
String localDateStr = (String) converter.convertValue(context, null, null, null, localDate, String.class);
119+
String localDateTimeStr = (String) converter.convertValue(context, null, null, null, localDateTime, String.class);
120+
String localTimeStr = (String) converter.convertValue(context, null, null, null, localTime, String.class);
121+
122+
LocalDate localDate2 = (LocalDate) converter.convertValue(context, null, null, null, localDateStr, LocalDate.class);
123+
assertEquals(localDate, localDate2);
124+
125+
LocalDateTime localDateTime2 = (LocalDateTime) converter.convertValue(context, null, null, null, localDateTimeStr, LocalDateTime.class);
126+
assertEquals(localDateTime, localDateTime2);
127+
128+
LocalTime localTime2 = (LocalTime) converter.convertValue(context, null, null, null, localTimeStr, LocalTime.class);
129+
assertEquals(localTime, localTime2);
103130
}
104131

105132
public void testDateConversionWithDefault() throws ParseException {

0 commit comments

Comments
 (0)