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

ddekany pushed a commit to branch FREEMARKER-35
in repository https://gitbox.apache.org/repos/asf/freemarker.git


The following commit(s) were added to refs/heads/FREEMARKER-35 by this push:
     new c915e2e  [FREEMARKER-35] Fixed: Added automatic adjustment of the 
format style for OffsetTime, if the time zone has DST, and the style doesn't 
show the offset.
c915e2e is described below

commit c915e2e2a638a15d5ca1de3d6d634a0da3bb07be
Author: ddekany <[email protected]>
AuthorDate: Wed Dec 15 18:48:21 2021 +0100

    [FREEMARKER-35] Fixed: Added automatic adjustment of the format style for 
OffsetTime, if the time zone has DST, and the style doesn't show the offset.
---
 src/main/java/freemarker/core/JavaTemplateTemporalFormat.java |  9 +++++----
 .../freemarker/test/templatesuite/templates/temporal.ftl      | 11 +++++++++++
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/main/java/freemarker/core/JavaTemplateTemporalFormat.java 
b/src/main/java/freemarker/core/JavaTemplateTemporalFormat.java
index 1d232d3..06ef378 100644
--- a/src/main/java/freemarker/core/JavaTemplateTemporalFormat.java
+++ b/src/main/java/freemarker/core/JavaTemplateTemporalFormat.java
@@ -113,13 +113,12 @@ class JavaTemplateTemporalFormat extends 
TemplateTemporalFormat {
                 throw new InvalidFormatParametersException(e.getMessage(), e);
             }
         }
-        this.dateTimeFormatter = dateTimeFormatter.withLocale(locale);
 
         if (isLocalTemporalClass(temporalClass)) {
             this.preFormatValueConversion = null;
         } else {
             PreFormatValueConversion preFormatValueConversion;
-            nonLocalFormatAttempt: do {
+            nonLocalFormatAttempt: while (true) {
                 if (showsZone(dateTimeFormatter)) {
                     if (temporalClass == Instant.class) {
                         preFormatValueConversion = 
PreFormatValueConversion.INSTANT_TO_ZONED_DATE_TIME;
@@ -143,17 +142,19 @@ class JavaTemplateTemporalFormat extends 
TemplateTemporalFormat {
                                             + "it's not possible to convert 
the value to the local time in that zone, "
                                             + "since we don't know the day.");
                         }
+                        dateTimeFormatter = 
DateTimeFormatter.ofLocalizedTime(timePartFormatStyle);
                         formatString = 
timePartFormatStyle.name().toLowerCase(Locale.ROOT);
-                        preFormatValueConversion = null; // Avoid false alarm 
"might not have been initialized"
                         continue nonLocalFormatAttempt;
                     } else {
                         preFormatValueConversion = 
PreFormatValueConversion.CONVERT_TO_CURRENT_ZONE;
                     }
                 }
-            } while (false);
+                break nonLocalFormatAttempt;
+            };
             this.preFormatValueConversion = preFormatValueConversion;
         }
 
+        this.dateTimeFormatter = dateTimeFormatter.withLocale(locale);
         this.formatString = formatString;
         this.zoneId = timeZone.toZoneId();
     }
diff --git 
a/src/test/resources/freemarker/test/templatesuite/templates/temporal.ftl 
b/src/test/resources/freemarker/test/templatesuite/templates/temporal.ftl
index b850552..79346e8 100644
--- a/src/test/resources/freemarker/test/templatesuite/templates/temporal.ftl
+++ b/src/test/resources/freemarker/test/templatesuite/templates/temporal.ftl
@@ -28,6 +28,10 @@
 <@assertEquals expected="Apr 5, 2003 7:07:08 AM" actual=zonedDateTime?string />
 
 <#setting timeZone="America/New_York">
+<@assertEquals expected="6:07:08 AM" actual=localTime?string />
+<#-- Automatic medium->long step up: -->
+<@assertEquals expected="6:07:08 AM Z" actual=offsetTime?string />
+
 <@assertEquals expected="2003-04-05T01:07:08-05:00" actual=instant?string.iso 
/>
 <@assertEquals expected="2003-04-05T06:07:08" actual=localDateTime?string.iso 
/>
 <@assertEquals expected="2003-04-05" actual=localDate?string.iso />
@@ -76,6 +80,13 @@
 <#-- These fail on Java 8 because of JDK-8085887
 <@assertEquals expected="5 avril 2003 06:07:08 ET" 
actual=localDateTime?string.long />
 <@assertEquals expected="samedi 5 avril 2003 06 h 07 ET" 
actual=localDateTime?string.full />
+
+<#-- Automatic short->medium->long step up: -->
+<@assertEquals expected="06:07:08 Z" actual=offsetTime?string.short />
+<#-- Automatic medium->long step up: -->
+<@assertEquals expected="06:07:08 Z" actual=offsetTime?string.medium />
+<@assertEquals expected="06:07:08 Z" actual=offsetTime?string.long />
+<@assertEquals expected="06 h 07 Z" actual=offsetTime?string.full />
 -->
 
 <#-- There combinations are clearly not supported by the "localized pattern" 
API. -->

Reply via email to