ICU-22526 Allow GMT-23:59 time zone

ECMA402 now allow offset timezone from -23:59 to 23:59.
We need to lower the minimum ZONE_OFFSET value to -23:59
This commit is contained in:
Frank Tang 2023-10-02 15:57:11 -07:00 committed by Frank Yung-Fong Tang
parent 1651e63b33
commit d82ad9975d
5 changed files with 20 additions and 2 deletions

View file

@ -636,7 +636,7 @@ static const int32_t kCalendarLimits[UCAL_FIELD_COUNT][4] = {
{ 0, 0, 59, 59 }, // MINUTE
{ 0, 0, 59, 59 }, // SECOND
{ 0, 0, 999, 999 }, // MILLISECOND
{-16*kOneHour, -16*kOneHour, 12*kOneHour, 30*kOneHour }, // ZONE_OFFSET
{-24*kOneHour, -16*kOneHour, 12*kOneHour, 30*kOneHour }, // ZONE_OFFSET
{ -1*kOneHour, -1*kOneHour, 2*kOneHour, 2*kOneHour }, // DST_OFFSET
{/*N/A*/-1, /*N/A*/-1, /*N/A*/-1, /*N/A*/-1}, // YEAR_WOY
{ 1, 1, 7, 7 }, // DOW_LOCAL

View file

@ -80,6 +80,7 @@ void TimeZoneTest::runIndexedTest( int32_t index, UBool exec, const char* &name,
TESTCASE_AUTO(TestCasablancaNameAndOffset22041);
TESTCASE_AUTO(TestRawOffsetAndOffsetConsistency22041);
TESTCASE_AUTO(TestGetIanaID);
TESTCASE_AUTO(TestGMTMinus24ICU22526);
TESTCASE_AUTO_END;
}
@ -2664,4 +2665,13 @@ void TimeZoneTest::TestGetIanaID() {
}
}
}
void TimeZoneTest::TestGMTMinus24ICU22526() {
UErrorCode status = U_ZERO_ERROR;
LocalPointer<TimeZone> tz(TimeZone::createTimeZone("GMT-23:59"), status);
U_ASSERT(U_SUCCESS(status));
GregorianCalendar gc(tz.orphan(), status);
gc.setTime(123456789, status);
gc.get(UCAL_MONTH, status);
}
#endif /* #if !UCONFIG_NO_FORMATTING */

View file

@ -105,6 +105,7 @@ public:
void TestGetIDForWindowsID();
void TestCasablancaNameAndOffset22041();
void TestRawOffsetAndOffsetConsistency22041();
void TestGMTMinus24ICU22526();
void TestGetIanaID();

View file

@ -4582,7 +4582,7 @@ public abstract class Calendar implements Serializable, Cloneable, Comparable<Ca
{ 0, 0, 59, 59 }, // MINUTE
{ 0, 0, 59, 59 }, // SECOND
{ 0, 0, 999, 999 }, // MILLISECOND
{-16*ONE_HOUR, -16*ONE_HOUR, 12*ONE_HOUR, 30*ONE_HOUR }, // ZONE_OFFSET
{-24*ONE_HOUR, -16*ONE_HOUR, 12*ONE_HOUR, 30*ONE_HOUR }, // ZONE_OFFSET
{ 0, 0, 2*ONE_HOUR, 2*ONE_HOUR }, // DST_OFFSET
{/* */}, // YEAR_WOY
{ 1, 1, 7, 7 }, // DOW_LOCAL

View file

@ -2419,6 +2419,13 @@ public class TimeZoneTest extends TestFmwk
}
}
}
@Test
public void TestGMTMinus24ICU22526() {
TimeZone tz = TimeZone.getTimeZone("GMT-23:59");
GregorianCalendar gc = new GregorianCalendar(tz);
gc.setTimeInMillis(123456789);
gc.get(GregorianCalendar.MONTH);
}
}
//eof