From 3a89139105efcdc7e49646b27e56fa02ad94bb39 Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 30 May 2019 08:56:13 +0000 Subject: [PATCH] Freemarker Date Handling improved git-svn-id: https://svn.libreccm.org/ccm/trunk@6092 8810af33-2d31-482b-a856-94f89814c4df --- .../FreeMarkerPresentationManager.java | 44 +++++++++++++++++-- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/ccm-themedirector/src/org/libreccm/theming/FreeMarkerPresentationManager.java b/ccm-themedirector/src/org/libreccm/theming/FreeMarkerPresentationManager.java index 77c9f5c9c..d2317635a 100644 --- a/ccm-themedirector/src/org/libreccm/theming/FreeMarkerPresentationManager.java +++ b/ccm-themedirector/src/org/libreccm/theming/FreeMarkerPresentationManager.java @@ -498,10 +498,10 @@ public class FreeMarkerPresentationManager implements PresentationManager { .get(2)) .getAsNumber() .intValue(); - final int dayOfMonth = ((TemplateNumberModel) list - .get(3)) - .getAsNumber() - .intValue(); + final int dayOfMonth = fixDayOfMonth( + ((TemplateNumberModel) list.get(3)).getAsNumber().intValue(), + month, + year); final int hour = ((TemplateNumberModel) list .get(4)) .getAsNumber() @@ -530,6 +530,42 @@ public class FreeMarkerPresentationManager implements PresentationManager { return formatter.format(localDateTime); } + private int fixDayOfMonth(final int dayOfMonth, + final int month, + final int year) { + + // Febrary is the most complex + if (month == 2) { + if (year % 4 == 0 && year % 400 == 0) { + if (dayOfMonth > 29) { + return 29; + } else { + return dayOfMonth; + } + } else if (year % 4 == 0 && year % 100 != 0) { + if (dayOfMonth > 29) { + return 29; + } else { + return dayOfMonth; + } + } else { + if (dayOfMonth > 28) { + return 28; + } else { + return dayOfMonth; + } + } + } else if (month == 4 || month == 6 || month == 9 || month == 11) { + if (dayOfMonth > 30) { + return 30; + } else { + return dayOfMonth; + } + } else { + return dayOfMonth; + } + } + private Optional findFormat( final List dateFormats, final String style,