summaryrefslogtreecommitdiff
path: root/icu4j
diff options
context:
space:
mode:
authorVictor Chang <vichang@google.com>2023-02-24 16:28:04 +0000
committerVictor Chang <vichang@google.com>2023-02-24 16:56:23 +0000
commit12700796d197cfd5b4d3d4eb2d092b2e21f46b9d (patch)
tree7b2247941535a720884dc0408080929b8e57b597 /icu4j
parent0cfb88c9263d9fef67936eb75a2b6477f1d8f348 (diff)
downloadicu-12700796d197cfd5b4d3d4eb2d092b2e21f46b9d.tar.gz
Cherry-pick: ICU-22226 Fix Calendar.getFirstDayOfWeek to honor -u-fw
Upstream commit: https://github.com/unicode-org/icu/commit/76df897b77fd938abc29c9121dde794300a171e6 Upstream bug: https://unicode-org.atlassian.net/browse/ICU-11870 Test: m droid Change-Id: Ic48e20ac9f94eea6246eb37e19b294c375262afe
Diffstat (limited to 'icu4j')
-rw-r--r--icu4j/main/classes/core/src/com/ibm/icu/util/Calendar.java19
-rw-r--r--icu4j/main/tests/core/src/com/ibm/icu/dev/test/calendar/CalendarRegressionTest.java32
2 files changed, 51 insertions, 0 deletions
diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/Calendar.java b/icu4j/main/classes/core/src/com/ibm/icu/util/Calendar.java
index 1441950cc..878f558cb 100644
--- a/icu4j/main/classes/core/src/com/ibm/icu/util/Calendar.java
+++ b/icu4j/main/classes/core/src/com/ibm/icu/util/Calendar.java
@@ -1595,6 +1595,25 @@ public abstract class Calendar implements Serializable, Cloneable, Comparable<Ca
// week data
setWeekData(getRegionForCalendar(locale));
+ // Check if the locale has a "fw" u extension and we honor it if present.
+ String fw = locale.getKeywordValue("fw");
+ if (fw != null) {
+ int fwOverride;
+ switch (fw) {
+ case "sun": fwOverride = SUNDAY; break;
+ case "mon": fwOverride = MONDAY; break;
+ case "tue": fwOverride = TUESDAY; break;
+ case "wed": fwOverride = WEDNESDAY; break;
+ case "thu": fwOverride = THURSDAY; break;
+ case "fri": fwOverride = FRIDAY; break;
+ case "sat": fwOverride = SATURDAY; break;
+ default: fwOverride = -1;
+ }
+ if (fwOverride != -1) {
+ setFirstDayOfWeek(fwOverride);
+ }
+ }
+
// set valid/actual locale
setCalendarLocale(locale);
diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/calendar/CalendarRegressionTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/calendar/CalendarRegressionTest.java
index 717141fb6..7931d70cf 100644
--- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/calendar/CalendarRegressionTest.java
+++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/calendar/CalendarRegressionTest.java
@@ -2623,5 +2623,37 @@ public class CalendarRegressionTest extends com.ibm.icu.dev.test.TestFmwk {
TESTS[i][2], cal.getType());
}
}
+
+ @Test
+ public void TestRespectUExtensionFw() { // ICU-22226
+ String[] localeIds = {
+ "en-US",
+ "en-US-u-fw-xyz",
+ "en-US-u-fw-sun",
+ "en-US-u-fw-mon",
+ "en-US-u-fw-thu",
+ "en-US-u-fw-sat"
+ };
+ int[] expectedValues = {
+ Calendar.SUNDAY,
+ Calendar.SUNDAY,
+ Calendar.SUNDAY,
+ Calendar.MONDAY,
+ Calendar.THURSDAY,
+ Calendar.SATURDAY
+ };
+
+ assertEquals(
+ "The localeIds count matches the expectedValues count",
+ localeIds.length,
+ expectedValues.length);
+
+ for (int i = 0; i < localeIds.length; i++) {
+ assertEquals(
+ "Calendar.getFirstDayOfWeek() does not seem to respect fw extension u in locale id",
+ expectedValues[i],
+ Calendar.getInstance(Locale.forLanguageTag(localeIds[i])).getFirstDayOfWeek());
+ }
+ }
}
//eof