This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch WW-5272-time
in repository https://gitbox.apache.org/repos/asf/struts.git

commit 08de24588ad5b88ec3554b476c9d3cf0fb47b32c
Author: Lukasz Lenart <lukaszlen...@apache.org>
AuthorDate: Wed Dec 28 10:13:04 2022 +0100

    WW-5272 Extends <s:date/> to support java.sql.Time
---
 .../java/org/apache/struts2/components/Date.java   |  5 +++-
 .../components/date/SimpleDateFormatAdapter.java   |  2 +-
 .../org/apache/struts2/components/DateTest.java    | 32 ++++++++++++++++++++--
 3 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/core/src/main/java/org/apache/struts2/components/Date.java 
b/core/src/main/java/org/apache/struts2/components/Date.java
index 7a8cda061..de640cbda 100644
--- a/core/src/main/java/org/apache/struts2/components/Date.java
+++ b/core/src/main/java/org/apache/struts2/components/Date.java
@@ -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) {
diff --git 
a/core/src/main/java/org/apache/struts2/components/date/SimpleDateFormatAdapter.java
 
b/core/src/main/java/org/apache/struts2/components/date/SimpleDateFormatAdapter.java
index 38f3c5296..b7cf5441a 100644
--- 
a/core/src/main/java/org/apache/struts2/components/date/SimpleDateFormatAdapter.java
+++ 
b/core/src/main/java/org/apache/struts2/components/date/SimpleDateFormatAdapter.java
@@ -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);
         }
diff --git a/core/src/test/java/org/apache/struts2/components/DateTest.java 
b/core/src/test/java/org/apache/struts2/components/DateTest.java
index ffe01a52a..477b128a6 100644
--- a/core/src/test/java/org/apache/struts2/components/DateTest.java
+++ b/core/src/test/java/org/apache/struts2/components/DateTest.java
@@ -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();

Reply via email to