SLING-9983 - Add support for predefined date format styles
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/FormatFilterExtension.java b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/FormatFilterExtension.java
index f98df20..06527cf 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/FormatFilterExtension.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/FormatFilterExtension.java
@@ -18,6 +18,7 @@
******************************************************************************/
package org.apache.sling.scripting.sightly.impl.engine.extension;
+import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
@@ -175,16 +176,42 @@
return "";
}
+ private int getPredefinedFormattingStyleFromValue(String value) {
+ switch (value.toLowerCase(Locale.ROOT)) {
+ case "default":
+ return DateFormat.DEFAULT;
+ case "short":
+ return DateFormat.SHORT;
+ case "medium":
+ return DateFormat.MEDIUM;
+ case "long":
+ return DateFormat.LONG;
+ case "full":
+ return DateFormat.FULL;
+ default:
+ return -1;
+ }
+ }
+
private String formatDate(String format, Date date, Locale locale, TimeZone timezone) {
if (date == null) {
return null;
}
try {
- SimpleDateFormat formatter;
- if (locale != null) {
- formatter = new SimpleDateFormat(format, locale);
+ final DateFormat formatter;
+ int formattingStyle = getPredefinedFormattingStyleFromValue(format);
+ if (formattingStyle != -1) {
+ if (locale != null) {
+ formatter = DateFormat.getDateInstance(formattingStyle, locale);
+ } else {
+ formatter = DateFormat.getDateInstance(formattingStyle);
+ }
} else {
- formatter = new SimpleDateFormat(format);
+ if (locale != null) {
+ formatter = new SimpleDateFormat(format, locale);
+ } else {
+ formatter = new SimpleDateFormat(format);
+ }
}
if (timezone != null) {
formatter.setTimeZone(timezone);