diff options
author | Gary Gregory <garydgregory@gmail.com> | 2022-05-15 15:51:31 -0400 |
---|---|---|
committer | Gary Gregory <garydgregory@gmail.com> | 2022-05-15 15:51:31 -0400 |
commit | 25e91c4242283d118ba978d4f38cd18e10c890dc (patch) | |
tree | 3356563cf22f95490ab408b525ee399a6ee50a65 | |
parent | eff43864b34ab2be2eae4e9ac0e780d34fab57b3 (diff) | |
download | apache-commons-lang-25e91c4242283d118ba978d4f38cd18e10c890dc.tar.gz |
Move new internal Calendar APIs to CalendarUtils and refactor.
5 files changed, 103 insertions, 75 deletions
diff --git a/src/main/java/org/apache/commons/lang3/time/CalendarUtils.java b/src/main/java/org/apache/commons/lang3/time/CalendarUtils.java index 2cce60468..84f8d2128 100644 --- a/src/main/java/org/apache/commons/lang3/time/CalendarUtils.java +++ b/src/main/java/org/apache/commons/lang3/time/CalendarUtils.java @@ -18,6 +18,8 @@ package org.apache.commons.lang3.time; import java.util.Calendar; +import java.util.Locale; +import java.util.Map; import java.util.Objects; /** @@ -32,18 +34,41 @@ public class CalendarUtils { */ public static final CalendarUtils INSTANCE = new CalendarUtils(Calendar.getInstance()); + /** + * Gets a CalendarUtils using the default time zone and specified locale. The <code>CalendarUtils</code> returned is based on the current time in the + * default time zone with the given locale. + * + * @param locale the locale for the week data + * @return a Calendar. + */ + static CalendarUtils getInstance(final Locale locale) { + return new CalendarUtils(Calendar.getInstance(locale), locale); + } + private final Calendar calendar; + private final Locale locale; + /** * Creates an instance for the given Calendar. * * @param calendar A Calendar. */ public CalendarUtils(final Calendar calendar) { - this.calendar = Objects.requireNonNull(calendar, "calendar"); + this(calendar, Locale.getDefault()); } /** + * Creates an instance for the given Calendar. + * + * @param calendar A Calendar. + * @param locale A Locale. + */ + CalendarUtils(final Calendar calendar, final Locale locale) { + this.calendar = Objects.requireNonNull(calendar, "calendar"); + this.locale = Objects.requireNonNull(locale, "locale"); + } + /** * Gets the current day of month. * * @return the current day of month. @@ -62,6 +87,43 @@ public class CalendarUtils { } /** + * Gets month names in the requested style. + * @param locale Locale + * @param style Must be a valid {@link Calendar#getDisplayNames(int, int, Locale)} month style. + * @return Styled names of months + */ + String[] getMonthDisplayNames(final int style) { + // Unfortunately standalone month names are not available in DateFormatSymbols, + // so we have to extract them. + final Calendar calendar = Calendar.getInstance(locale); + final Map<String, Integer> displayNames = calendar.getDisplayNames(Calendar.MONTH, style, locale); + if (displayNames == null) { + return null; + } + final String[] monthNames = new String[displayNames.size()]; + for (final Map.Entry<String, Integer> entry: displayNames.entrySet()) { + monthNames[entry.getValue()] = entry.getKey(); + } + return monthNames; + } + + /** + * Gets full standalone month names as used in "LLLL" date formatting. + * @return Long names of months + */ + String[] getStandaloneLongMonthNames() { + return getMonthDisplayNames(Calendar.LONG_STANDALONE); + } + + /** + * Gets short standalone month names as used in "LLLL" date formatting. + * @return Short names of months + */ + String[] getStandaloneShortMonthNames() { + return getMonthDisplayNames(Calendar.SHORT_STANDALONE); + } + + /** * Gets the current year. * * @return the current year. diff --git a/src/main/java/org/apache/commons/lang3/time/DateUtils.java b/src/main/java/org/apache/commons/lang3/time/DateUtils.java index 25a8275d8..33c61dcad 100644 --- a/src/main/java/org/apache/commons/lang3/time/DateUtils.java +++ b/src/main/java/org/apache/commons/lang3/time/DateUtils.java @@ -22,7 +22,6 @@ import java.util.Calendar; import java.util.Date; import java.util.Iterator; import java.util.Locale; -import java.util.Map; import java.util.NoSuchElementException; import java.util.TimeZone; import java.util.concurrent.TimeUnit; @@ -1832,40 +1831,4 @@ public class DateUtils { } } - /** - * Gets full standalone month names as used in "LLLL" date formatting. - * @param locale Locale - * @return Long names of months - */ - static String[] getStandaloneLongMonths(final Locale locale) { - return getMonthNames(locale, Calendar.LONG_STANDALONE); - } - - /** - * Gets short standalone month names as used in "LLLL" date formatting. - * @param locale Locale - * @return Short names of months - */ - static String[] getStandaloneShortMonths(final Locale locale) { - return getMonthNames(locale, Calendar.SHORT_STANDALONE); - } - - /** - * Gets month names in the requested style. - * @param locale Locale - * @param style Must be a valid {@link Calendar#getDisplayNames(int, int, Locale)} month style. - * @return Styled names of months - */ - private static String[] getMonthNames(final Locale locale, final int style) { - // Unfortunately standalone month names are not available in DateFormatSymbols, - // so we have to extract them. - final Calendar calendar = Calendar.getInstance(locale); - final Map<String, Integer> displayNames = calendar.getDisplayNames(Calendar.MONTH, style, locale); - final String[] monthNames = new String[displayNames.size()]; - for (final Map.Entry<String, Integer> entry: displayNames.entrySet()) { - monthNames[entry.getValue()] = entry.getKey(); - } - return monthNames; - } - } diff --git a/src/main/java/org/apache/commons/lang3/time/FastDatePrinter.java b/src/main/java/org/apache/commons/lang3/time/FastDatePrinter.java index df5f1b72d..84daab48f 100644 --- a/src/main/java/org/apache/commons/lang3/time/FastDatePrinter.java +++ b/src/main/java/org/apache/commons/lang3/time/FastDatePrinter.java @@ -235,9 +235,9 @@ public class FastDatePrinter implements DatePrinter, Serializable { break; case 'L': // month in year (text and number) if (tokenLen >= 4) { - rule = new TextField(Calendar.MONTH, DateUtils.getStandaloneLongMonths(mLocale)); + rule = new TextField(Calendar.MONTH, CalendarUtils.getInstance(mLocale).getStandaloneLongMonthNames()); } else if (tokenLen == 3) { - rule = new TextField(Calendar.MONTH, DateUtils.getStandaloneShortMonths(mLocale)); + rule = new TextField(Calendar.MONTH, CalendarUtils.getInstance(mLocale).getStandaloneShortMonthNames()); } else if (tokenLen == 2) { rule = TwoDigitMonthField.INSTANCE; } else { diff --git a/src/test/java/org/apache/commons/lang3/time/CalendarUtilsTest.java b/src/test/java/org/apache/commons/lang3/time/CalendarUtilsTest.java index 3ae5a9651..76f802494 100644 --- a/src/test/java/org/apache/commons/lang3/time/CalendarUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/time/CalendarUtilsTest.java @@ -20,6 +20,7 @@ package org.apache.commons.lang3.time; import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Calendar; +import java.util.Locale; import org.junit.jupiter.api.Test; @@ -36,8 +37,45 @@ public class CalendarUtilsTest { } @Test + public void testGetStandaloneLongMonthNames() { + final String[] monthNames = CalendarUtils.getInstance(Locale.GERMAN).getStandaloneLongMonthNames(); + assertEquals(12, monthNames.length); + assertEquals("Januar", monthNames[0]); + assertEquals("Februar", monthNames[1]); + assertEquals("M\u00e4rz", monthNames[2]); + assertEquals("April", monthNames[3]); + assertEquals("Mai", monthNames[4]); + assertEquals("Juni", monthNames[5]); + assertEquals("Juli", monthNames[6]); + assertEquals("August", monthNames[7]); + assertEquals("September", monthNames[8]); + assertEquals("Oktober", monthNames[9]); + assertEquals("November", monthNames[10]); + assertEquals("Dezember", monthNames[11]); + } + + @Test + public void testGetStandaloneShortMonthNames() { + final String[] monthNames = CalendarUtils.getInstance(Locale.GERMAN).getStandaloneShortMonthNames(); + assertEquals(12, monthNames.length); + assertEquals("Jan", monthNames[0]); + assertEquals("Feb", monthNames[1]); + assertEquals("M\u00e4r", monthNames[2]); + assertEquals("Apr", monthNames[3]); + assertEquals("Mai", monthNames[4]); + assertEquals("Jun", monthNames[5]); + assertEquals("Jul", monthNames[6]); + assertEquals("Aug", monthNames[7]); + assertEquals("Sep", monthNames[8]); + assertEquals("Okt", monthNames[9]); + assertEquals("Nov", monthNames[10]); + assertEquals("Dez", monthNames[11]); + } + + @Test public void testGetYear() { assertEquals(Calendar.getInstance().get(Calendar.YEAR), CalendarUtils.INSTANCE.getYear()); } + } diff --git a/src/test/java/org/apache/commons/lang3/time/DateUtilsTest.java b/src/test/java/org/apache/commons/lang3/time/DateUtilsTest.java index 7e9b40fad..1d5127f19 100644 --- a/src/test/java/org/apache/commons/lang3/time/DateUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/time/DateUtilsTest.java @@ -1695,40 +1695,5 @@ public class DateUtilsTest { } } - @Test - public void testGetStandaloneLongMonthNames() { - final String[] monthNames = DateUtils.getStandaloneLongMonths(Locale.GERMAN); - assertEquals(12, monthNames.length); - assertEquals("Januar", monthNames[0]); - assertEquals("Februar", monthNames[1]); - assertEquals("M\u00e4rz", monthNames[2]); - assertEquals("April", monthNames[3]); - assertEquals("Mai", monthNames[4]); - assertEquals("Juni", monthNames[5]); - assertEquals("Juli", monthNames[6]); - assertEquals("August", monthNames[7]); - assertEquals("September", monthNames[8]); - assertEquals("Oktober", monthNames[9]); - assertEquals("November", monthNames[10]); - assertEquals("Dezember", monthNames[11]); - } - - @Test - public void testGetStandaloneShortMonthNames() { - final String[] monthNames = DateUtils.getStandaloneShortMonths(Locale.GERMAN); - assertEquals(12, monthNames.length); - assertEquals("Jan", monthNames[0]); - assertEquals("Feb", monthNames[1]); - assertEquals("M\u00e4r", monthNames[2]); - assertEquals("Apr", monthNames[3]); - assertEquals("Mai", monthNames[4]); - assertEquals("Jun", monthNames[5]); - assertEquals("Jul", monthNames[6]); - assertEquals("Aug", monthNames[7]); - assertEquals("Sep", monthNames[8]); - assertEquals("Okt", monthNames[9]); - assertEquals("Nov", monthNames[10]); - assertEquals("Dez", monthNames[11]); - } } |