From 19bac42f984aa3df9467135f45b7727e7fa31e81 Mon Sep 17 00:00:00 2001 From: Frank Tang Date: Thu, 27 Jul 2023 17:03:02 -0700 Subject: [PATCH] ICU-22446 Fix incorrect Hebrew ORDINAL MONTH bug --- icu4c/source/i18n/calendar.cpp | 2 -- icu4c/source/i18n/hebrwcal.cpp | 2 +- icu4c/source/test/intltest/caltest.cpp | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/icu4c/source/i18n/calendar.cpp b/icu4c/source/i18n/calendar.cpp index b9972086c65..6075aa131d1 100644 --- a/icu4c/source/i18n/calendar.cpp +++ b/icu4c/source/i18n/calendar.cpp @@ -1827,7 +1827,6 @@ void Calendar::roll(UCalendarDateFields field, int32_t amount, UErrorCode& statu } set(field, newYear); pinField(UCAL_MONTH,status); - pinField(UCAL_ORDINAL_MONTH,status); pinField(UCAL_DAY_OF_MONTH,status); return; } @@ -1836,7 +1835,6 @@ void Calendar::roll(UCalendarDateFields field, int32_t amount, UErrorCode& statu // Rolling the year can involve pinning the DAY_OF_MONTH. set(field, internalGet(field) + amount); pinField(UCAL_MONTH,status); - pinField(UCAL_ORDINAL_MONTH,status); pinField(UCAL_DAY_OF_MONTH,status); return; diff --git a/icu4c/source/i18n/hebrwcal.cpp b/icu4c/source/i18n/hebrwcal.cpp index efd0d8fd4ac..6451c89c599 100644 --- a/icu4c/source/i18n/hebrwcal.cpp +++ b/icu4c/source/i18n/hebrwcal.cpp @@ -777,7 +777,7 @@ int32_t HebrewCalendar::internalGetMonth() const { HebrewCalendar *nonConstThis = (HebrewCalendar*)this; // cast away const int32_t year = nonConstThis->handleGetExtendedYear(); - return ordinalMonth + ((isLeapYear(year) && (ordinalMonth > ADAR_1)) ? 1: 0); + return ordinalMonth + (((!isLeapYear(year)) && (ordinalMonth > ADAR_1)) ? 1: 0); } return Calendar::internalGetMonth(); } diff --git a/icu4c/source/test/intltest/caltest.cpp b/icu4c/source/test/intltest/caltest.cpp index 52bb00e5ae0..9d89f468eef 100644 --- a/icu4c/source/test/intltest/caltest.cpp +++ b/icu4c/source/test/intltest/caltest.cpp @@ -5157,7 +5157,7 @@ void CalendarTest::TestHebrewCalendarOrdinalMonthSet() { VerifyMonth(this, "cc2", cc2.getAlias(), icu::HebrewCalendar::ADAR, 6, false, "M06"); VerifyMonth(this, "cc3", cc3.getAlias(), icu::HebrewCalendar::ADAR, 6, false, "M06"); - cc1->set(UCAL_ORDINAL_MONTH, 6); + cc1->set(UCAL_ORDINAL_MONTH, 7); cc2->setTemporalMonthCode("M07", status); if (failure(status, "setTemporalMonthCode failure")) return; cc3->set(UCAL_MONTH, icu::HebrewCalendar::NISAN);