From 93751c13557a5dc7cbf853327b73d5b272f1f0d5 Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Mon, 3 Jun 2013 12:18:57 +0300 Subject: [PATCH] Use correct day names when formatting dates (#6207) Change-Id: I2010f87ef4f9359cdc95104cc02c83355a8630ed --- .../com/vaadin/client/DateTimeService.java | 48 ++++++++++++++++++- .../datefield/CustomDateFormats.java | 1 + 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/client/src/com/vaadin/client/DateTimeService.java b/client/src/com/vaadin/client/DateTimeService.java index 53e8f81a38..5fd0574d3e 100644 --- a/client/src/com/vaadin/client/DateTimeService.java +++ b/client/src/com/vaadin/client/DateTimeService.java @@ -308,10 +308,11 @@ public class DateTimeService { */ public String formatDate(Date date, String formatStr) { /* - * Format month names separately when locale for the DateTimeService is - * not the same as the browser locale + * Format month and day names separately when locale for the + * DateTimeService is not the same as the browser locale */ formatStr = formatMonthNames(date, formatStr); + formatStr = formatDayNames(date, formatStr); // Format uses the browser locale DateTimeFormat format = DateTimeFormat.getFormat(formatStr); @@ -321,6 +322,49 @@ public class DateTimeService { return result; } + private String formatDayNames(Date date, String formatStr) { + if (formatStr.contains("EEEE")) { + String dayName = getDay(date.getDay()); + + if (dayName != null) { + /* + * Replace 4 or more E:s with the quoted day name. Also + * concatenate generated string with any other string prepending + * or following the EEEE pattern, i.e. 'EEEE'ta ' becomes 'DAYta + * ' and not 'DAY''ta ', 'ab'EEEE becomes 'abDAY', 'x'EEEE'y' + * becomes 'xDAYy'. + */ + formatStr = formatStr.replaceAll("'([E]{4,})'", dayName); + formatStr = formatStr.replaceAll("([E]{4,})'", "'" + dayName); + formatStr = formatStr.replaceAll("'([E]{4,})", dayName + "'"); + formatStr = formatStr + .replaceAll("[E]{4,}", "'" + dayName + "'"); + } + } + + if (formatStr.contains("EEE")) { + + String dayName = getShortDay(date.getMonth()); + + if (dayName != null) { + /* + * Replace 3 or more E:s with the quoted month name. Also + * concatenate generated string with any other string prepending + * or following the EEE pattern, i.e. 'EEE'ta ' becomes 'DAYta ' + * and not 'DAY''ta ', 'ab'EEE becomes 'abDAY', 'x'EEE'y' + * becomes 'xDAYy'. + */ + formatStr = formatStr.replaceAll("'([E]{3,})'", dayName); + formatStr = formatStr.replaceAll("([E]{3,})'", "'" + dayName); + formatStr = formatStr.replaceAll("'([E]{3,})", dayName + "'"); + formatStr = formatStr + .replaceAll("[E]{3,}", "'" + dayName + "'"); + } + } + + return formatStr; + } + private String formatMonthNames(Date date, String formatStr) { if (formatStr.contains("MMMM")) { String monthName = getMonth(date.getMonth()); diff --git a/uitest/src/com/vaadin/tests/components/datefield/CustomDateFormats.java b/uitest/src/com/vaadin/tests/components/datefield/CustomDateFormats.java index 247478256f..015a974b3e 100644 --- a/uitest/src/com/vaadin/tests/components/datefield/CustomDateFormats.java +++ b/uitest/src/com/vaadin/tests/components/datefield/CustomDateFormats.java @@ -104,6 +104,7 @@ public class CustomDateFormats extends TestBase { locale); addDateField(gridLayout, getDatePattern(locale, DateFormat.SHORT), locale); + addDateField(gridLayout, "EEE d MMMM yyyy", locale); } -- 2.39.5