WW-5272 Extends <s:date/> to support java.sql.Time

This commit is contained in:
Lukasz Lenart
2022-12-28 10:13:04 +01:00
parent 266d2d4ed5
commit 08de24588a
3 changed files with 35 additions and 4 deletions
@@ -32,6 +32,7 @@ import java.io.Writer;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.ArrayList;
@@ -294,7 +295,9 @@ public class Date extends ContextBean {
// find the name on the valueStack
Object dateObject = findValue(name);
if (dateObject instanceof java.sql.Date) {
date = ((java.sql.Date) dateObject).toLocalDate().atStartOfDay(tz);
date = ((java.sql.Date) dateObject).toLocalDate().atTime(LocalTime.now(tz)).atZone(tz);
} else if (dateObject instanceof java.sql.Time) {
date = ((java.sql.Time) dateObject).toLocalTime().atDate(ZonedDateTime.now(tz).toLocalDate()).atZone(tz);
} else if (dateObject instanceof java.util.Date) {
date = ((java.util.Date) dateObject).toInstant().atZone(tz);
} else if (dateObject instanceof Calendar) {
@@ -34,7 +34,7 @@ public class SimpleDateFormatAdapter implements DateFormatter {
DateFormat df;
Locale locale = ActionContext.getContext().getLocale();
if (format == null) {
df = SimpleDateFormat.getDateInstance(DateFormat.MEDIUM, locale);
df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, locale);
} else {
df = new SimpleDateFormat(format, locale);
}
@@ -66,7 +66,7 @@ public class DateTest extends StrutsInternalTestCase {
java.util.Date now = new java.util.Date();
String expected = SimpleDateFormat.getDateInstance(DateFormat.MEDIUM, ActionContext.getContext().getLocale()).format(now);
String expected = prepareFormat().format(now);
context.put("myDate", now);
Writer writer = new StringWriter();
@@ -88,7 +88,7 @@ public class DateTest extends StrutsInternalTestCase {
java.sql.Date now = new java.sql.Date(System.currentTimeMillis());
String expected = SimpleDateFormat.getDateInstance(DateFormat.MEDIUM, ActionContext.getContext().getLocale()).format(now);
String expected = prepareFormat().format(now);
context.put("myDate", now);
Writer writer = new StringWriter();
@@ -103,6 +103,34 @@ public class DateTest extends StrutsInternalTestCase {
assertEquals(expected, writer.toString());
}
public void testJavaSqlTime() {
// given
Date date = new Date(stack);
date.setDateFormatter(new SimpleDateFormatAdapter());
java.sql.Time now = new java.sql.Time(System.currentTimeMillis());
String timeFormat = "hh:mm:ss";
String expected = new SimpleDateFormat(timeFormat, ActionContext.getContext().getLocale()).format(now);
context.put("myDate", now);
Writer writer = new StringWriter();
// when
date.setName("myDate");
date.setNice(false);
date.setFormat(timeFormat);
date.start(writer);
date.end(writer, "");
// then
assertEquals(expected, writer.toString());
}
private DateFormat prepareFormat() {
return SimpleDateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, ActionContext.getContext().getLocale());
}
@Override
public void setUp() throws Exception {
super.setUp();