diff --git a/icu4c/source/i18n/chnsecal.cpp b/icu4c/source/i18n/chnsecal.cpp index 5f805273b89..016cf8f4338 100644 --- a/icu4c/source/i18n/chnsecal.cpp +++ b/icu4c/source/i18n/chnsecal.cpp @@ -742,8 +742,7 @@ void ChineseCalendar::offsetMonth(int32_t newMoon, int32_t dom, int32_t delta) { // Pin the dom. In this calendar all months are 29 or 30 days // so pinning just means handling dom 30. if (dom > 29) { - set(UCAL_JULIAN_DAY, jd-1, status); - if (U_FAILURE(status)) return; + set(UCAL_JULIAN_DAY, jd-1); // TODO Fix this. We really shouldn't ever have to // explicitly call complete(). This is either a bug in // this method, in ChineseCalendar, or in @@ -752,12 +751,10 @@ void ChineseCalendar::offsetMonth(int32_t newMoon, int32_t dom, int32_t delta) { if (U_FAILURE(status)) return; if (getActualMaximum(UCAL_DAY_OF_MONTH, status) >= dom) { if (U_FAILURE(status)) return; - set(UCAL_JULIAN_DAY, jd, status); - if (U_FAILURE(status)) return; + set(UCAL_JULIAN_DAY, jd); } } else { - set(UCAL_JULIAN_DAY, jd, status); - if (U_FAILURE(status)) return; + set(UCAL_JULIAN_DAY, jd); } } diff --git a/icu4c/source/i18n/chnsecal.h b/icu4c/source/i18n/chnsecal.h index 664e5fb530a..0461f82018d 100644 --- a/icu4c/source/i18n/chnsecal.h +++ b/icu4c/source/i18n/chnsecal.h @@ -140,7 +140,6 @@ class ChineseCalendar : public Calendar { protected: virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const; virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const; - //virtual int32_t handleGetYearLength(int32_t extendedYear) const; virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth) const; virtual int32_t handleGetExtendedYear(); virtual void handleComputeFields(int32_t julianDay, UErrorCode &status); diff --git a/icu4c/source/test/testdata/calendar.txt b/icu4c/source/test/testdata/calendar.txt index 1d126213fb9..4c4d586c465 100644 --- a/icu4c/source/test/testdata/calendar.txt +++ b/icu4c/source/test/testdata/calendar.txt @@ -21,8 +21,9 @@ calendar:table(nofallback) { Type { "convert_rev" } }, } - // "0/1/1912/june/4 == gregorian year=1912, ERA=AD, same month, same day Cases { + // taiwanese calendar + // "0/1/1912/june/4 == gregorian year=1912, ERA=AD, same month, same day { "en_US@calendar=taiwan", "ERA=1,YEAR=1,MONTH=JUNE,DATE=4", // tw @@ -44,7 +45,76 @@ calendar:table(nofallback) { "en_US@calendar=taiwan", "ERA=0,YEAR=2,MONTH=JANUARY,DATE=24", // tw "ERA=1,YEAR=1910,MONTH=JANUARY,DATE=24", // greg - } + }, + + // chinese calendar + // (0-based months) + { + "en_US@calendar=chinese", + "EXTENDED_YEAR=4601,MONTH=6,DATE=28,IS_LEAP_MONTH=0", // ch + "YEAR=1964,MONTH=8,DATE=4", // greg + }, + { + "en_US@calendar=chinese", + "EXTENDED_YEAR=4601,MONTH=6,DATE=29,IS_LEAP_MONTH=0", // ch + "YEAR=1964,MONTH=8,DATE=5", // greg + }, + { + "en_US@calendar=chinese", + "EXTENDED_YEAR=4601,MONTH=7,DATE=1,IS_LEAP_MONTH=0", // ch + "YEAR=1964,MONTH=8,DATE=6", // greg + }, + { + "en_US@calendar=chinese", + "EXTENDED_YEAR=4601,MONTH=7,DATE=2,IS_LEAP_MONTH=0", // ch + "YEAR=1964,MONTH=8,DATE=7", // greg + }, + { + "en_US@calendar=chinese", + "EXTENDED_YEAR=4598,MONTH=10,DATE=18,IS_LEAP_MONTH=0", // ch + "YEAR=1961,MONTH=11,DATE=25", // greg + }, + { + "en_US@calendar=chinese", + "EXTENDED_YEAR=4636,MONTH=3,DATE=21,IS_LEAP_MONTH=0", // ch + "YEAR=1999,MONTH=5,DATE=4", // greg + }, + + { + "en_US@calendar=chinese", + "EXTENDED_YEAR=4627,MONTH=3,DATE=29,IS_LEAP_MONTH=0", // ch + "YEAR=1990,MONTH=4,DATE=23", // greg + }, + { + "en_US@calendar=chinese", + "EXTENDED_YEAR=4627,MONTH=4,DATE=1,IS_LEAP_MONTH=0", // ch + "YEAR=1990,MONTH=4,DATE=24", // greg + }, + { + "en_US@calendar=chinese", + "EXTENDED_YEAR=4627,MONTH=4,DATE=30,IS_LEAP_MONTH=0", // ch + "YEAR=1990,MONTH=5,DATE=22", // greg + }, + { + "en_US@calendar=chinese", + "EXTENDED_YEAR=4627,MONTH=4,DATE=1,IS_LEAP_MONTH=1", // ch + "YEAR=1990,MONTH=5,DATE=23", // greg + }, + { + "en_US@calendar=chinese", + "EXTENDED_YEAR=4627,MONTH=4,DATE=28,IS_LEAP_MONTH=1", // ch + "YEAR=1990,MONTH=6,DATE=20", // greg + }, + { + "en_US@calendar=chinese", + "EXTENDED_YEAR=4627,MONTH=4,DATE=29,IS_LEAP_MONTH=1", // ch + "YEAR=1990,MONTH=6,DATE=21", // greg + }, + { + "en_US@calendar=chinese", + "EXTENDED_YEAR=4627,MONTH=5,DATE=1,IS_LEAP_MONTH=0", // ch + "YEAR=1990,MONTH=6,DATE=22", // greg + }, } } TestCalendarOperations { @@ -57,7 +127,8 @@ calendar:table(nofallback) { Type { "ops" } }, } - Cases { + Cases { + //taiwan { "en_US@calendar=taiwan", "ERA=1,YEAR=1,MONTH=JUNE,DATE=4", // tw @@ -86,6 +157,78 @@ calendar:table(nofallback) { "YEAR=1", // date + 1 "ERA=1,YEAR=2,MONTH=JUNE,DATE=4", // tw }, + + //chinese + { // normal + "en_US@calendar=chinese", + "EXTENDED_YEAR=4642,MONTH=2,DATE=15,IS_LEAP_MONTH=0", // ch + "add", + "MONTH=3", // month + 3 + "EXTENDED_YEAR=4642,MONTH=5,DATE=15,IS_LEAP_MONTH=0", // ch + }, + { // across year + "en_US@calendar=chinese", + "EXTENDED_YEAR=4639,MONTH=11,DATE=15,IS_LEAP_MONTH=0", // ch + "add", + "MONTH=1", // month + 1 + "EXTENDED_YEAR=4640,MONTH=0,DATE=15,IS_LEAP_MONTH=0", // ch + }, + { // across year + "en_US@calendar=chinese", + "EXTENDED_YEAR=4640,MONTH=0,DATE=15,IS_LEAP_MONTH=0", // ch + "add", + "MONTH=-1", // month - 1 + "EXTENDED_YEAR=4639,MONTH=11,DATE=15,IS_LEAP_MONTH=0", // ch + }, + { // month=3 is a leap month + "en_US@calendar=chinese", + "EXTENDED_YEAR=4638,MONTH=2,DATE=15,IS_LEAP_MONTH=0", // ch + "add", + "MONTH=3", // month + 3 + "EXTENDED_YEAR=4638,MONTH=4,DATE=15,IS_LEAP_MONTH=0", // ch + }, + { // month=3 is a leap month + "en_US@calendar=chinese", + "EXTENDED_YEAR=4638,MONTH=2,DATE=15,IS_LEAP_MONTH=0", // ch + "add", + "MONTH=2", // month + 2 + "EXTENDED_YEAR=4638,MONTH=3,DATE=15,IS_LEAP_MONTH=1", // ch + }, + { // month=3 is a leap month + "en_US@calendar=chinese", + "EXTENDED_YEAR=4638,MONTH=3,DATE=15,IS_LEAP_MONTH=0", // ch + "add", + "MONTH=1", // month + 1 + "EXTENDED_YEAR=4638,MONTH=3,DATE=15,IS_LEAP_MONTH=1", // ch + }, + { // month=3 is a leap month + "en_US@calendar=chinese", + "EXTENDED_YEAR=4638,MONTH=3,DATE=15,IS_LEAP_MONTH=1", // ch + "add", + "MONTH=1", // month + 1 + "EXTENDED_YEAR=4638,MONTH=4,DATE=15,IS_LEAP_MONTH=0", // ch + }, + { // dom should pin + "en_US@calendar=chinese", + "EXTENDED_YEAR=4638,MONTH=3,DATE=30,IS_LEAP_MONTH=0", // ch + "add", + "MONTH=1", // month + 1 + "EXTENDED_YEAR=4638,MONTH=3,DATE=29,IS_LEAP_MONTH=1", // ch + }, + { // dom should pin + "en_US@calendar=chinese", + "EXTENDED_YEAR=4638,MONTH=3,DATE=30,IS_LEAP_MONTH=0", // ch + "add", + "MONTH=2", // month + 2 + "EXTENDED_YEAR=4638,MONTH=4,DATE=30,IS_LEAP_MONTH=0", // ch + }, + { // dom should pin + "en_US@calendar=chinese", + "EXTENDED_YEAR=4638,MONTH=3,DATE=30,IS_LEAP_MONTH=0", // ch + "add", + "MONTH=3", // month + 3 + "EXTENDED_YEAR=4638,MONTH=5,DATE=29,IS_LEAP_MONTH=0", // ch + }, } } }