diff --git a/core/src/main/java/org/apache/calcite/util/format/FormatElementEnum.java b/core/src/main/java/org/apache/calcite/util/format/FormatElementEnum.java index 0e289cf678e..ad6567cfb75 100644 --- a/core/src/main/java/org/apache/calcite/util/format/FormatElementEnum.java +++ b/core/src/main/java/org/apache/calcite/util/format/FormatElementEnum.java @@ -390,6 +390,14 @@ public enum FormatElementEnum implements FormatElement { sb.append(String.format(Locale.ROOT, "%d", calendar.get(Calendar.WEEK_OF_MONTH))); } }, + WM("WM", "The day of week number in the month (Sunday as the first day of the week) as a decimal " + + "number (1-5)") { + @Override public void format(StringBuilder sb, Date date) { + final Calendar calendar = Work.get().calendar; + calendar.setTime(date); + sb.append(String.format(Locale.ROOT, "%d", calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH))); + } + }, WW("w", "The week number of the year (Sunday as the first day of the week) as a decimal " + "number (00-53)") { @Override public void format(StringBuilder sb, Date date) { diff --git a/core/src/main/java/org/apache/calcite/util/format/FormatModels.java b/core/src/main/java/org/apache/calcite/util/format/FormatModels.java index d9c68950f70..d321a323ea9 100644 --- a/core/src/main/java/org/apache/calcite/util/format/FormatModels.java +++ b/core/src/main/java/org/apache/calcite/util/format/FormatModels.java @@ -68,6 +68,7 @@ import static org.apache.calcite.util.format.FormatElementEnum.SSSSS; import static org.apache.calcite.util.format.FormatElementEnum.TZR; import static org.apache.calcite.util.format.FormatElementEnum.W; +import static org.apache.calcite.util.format.FormatElementEnum.WM; import static org.apache.calcite.util.format.FormatElementEnum.WW; import static org.apache.calcite.util.format.FormatElementEnum.Y; import static org.apache.calcite.util.format.FormatElementEnum.YY; @@ -208,6 +209,7 @@ MI, literalElement(":"), SS, literalElement(" "), map.put("D", D); map.put("WW", WW); map.put("W", W); + map.put("WM", WM); map.put("IW", IW); map.put("Q", Q); map.put("AM", AMPM); diff --git a/core/src/test/java/org/apache/calcite/util/format/FormatElementEnumTest.java b/core/src/test/java/org/apache/calcite/util/format/FormatElementEnumTest.java index 066bcafaad5..8f73767a151 100644 --- a/core/src/test/java/org/apache/calcite/util/format/FormatElementEnumTest.java +++ b/core/src/test/java/org/apache/calcite/util/format/FormatElementEnumTest.java @@ -164,10 +164,16 @@ class FormatElementEnumTest { assertFormatElement(FormatElementEnum.SS, "2014-09-30T10:00:00Z", "00"); } - @Test void testWM() { + @Test void testW() { assertFormatElement(FormatElementEnum.W, "2014-09-30T10:00:00Z", "5"); } + @Test void testWM() { + assertFormatElement(FormatElementEnum.WM, "2014-09-30T10:00:00Z", "5"); + assertFormatElement(FormatElementEnum.WM, "2014-09-10T10:00:00Z", "2"); + assertFormatElement(FormatElementEnum.WM, "2014-09-02T10:00:00Z", "1"); + } + @Test void testWW() { assertFormatElement(FormatElementEnum.WW, "2014-09-30T10:00:00Z", "40"); }