aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Gregory <garydgregory@gmail.com>2022-05-15 15:51:31 -0400
committerGary Gregory <garydgregory@gmail.com>2022-05-15 15:51:31 -0400
commit25e91c4242283d118ba978d4f38cd18e10c890dc (patch)
tree3356563cf22f95490ab408b525ee399a6ee50a65
parenteff43864b34ab2be2eae4e9ac0e780d34fab57b3 (diff)
downloadapache-commons-lang-25e91c4242283d118ba978d4f38cd18e10c890dc.tar.gz
Move new internal Calendar APIs to CalendarUtils and refactor.
-rw-r--r--src/main/java/org/apache/commons/lang3/time/CalendarUtils.java64
-rw-r--r--src/main/java/org/apache/commons/lang3/time/DateUtils.java37
-rw-r--r--src/main/java/org/apache/commons/lang3/time/FastDatePrinter.java4
-rw-r--r--src/test/java/org/apache/commons/lang3/time/CalendarUtilsTest.java38
-rw-r--r--src/test/java/org/apache/commons/lang3/time/DateUtilsTest.java35
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]);
- }
}