ICU-20536 Japanese era Reiwa support in ICU4J 50
diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/JapaneseCalendar.java b/icu4j/main/classes/core/src/com/ibm/icu/util/JapaneseCalendar.java index 24ccb9b..96a0552 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/util/JapaneseCalendar.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/util/JapaneseCalendar.java
@@ -560,6 +560,7 @@ 1912, 7, 30, // Taisho 1926, 12, 25, // Showa 1989, 1, 8, // Heisei + 2019, 5, 1, // Reiwa }; //------------------------------------------------------------------------- @@ -576,25 +577,25 @@ * Constant for the era starting on Sept. 8, 1868 AD. * @stable ICU 2.8 */ - static public final int MEIJI = CURRENT_ERA - 3; + static public final int MEIJI = CURRENT_ERA - 4; /** * Constant for the era starting on July 30, 1912 AD. * @stable ICU 2.8 */ - static public final int TAISHO = CURRENT_ERA - 2; + static public final int TAISHO = CURRENT_ERA - 3; /** * Constant for the era starting on Dec. 25, 1926 AD. * @stable ICU 2.8 */ - static public final int SHOWA = CURRENT_ERA - 1; + static public final int SHOWA = CURRENT_ERA - 2; /** * Constant for the era starting on Jan. 7, 1989 AD. * @stable ICU 2.8 */ - static public final int HEISEI = CURRENT_ERA; + static public final int HEISEI = CURRENT_ERA - 1; /** * Override GregorianCalendar. We should really handle YEAR_WOY and
diff --git a/icu4j/main/shared/data/icudata.jar b/icu4j/main/shared/data/icudata.jar index 02c965d..3d31429 100755 --- a/icu4j/main/shared/data/icudata.jar +++ b/icu4j/main/shared/data/icudata.jar
@@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c6dfb005d2ad7f4272663dbdc3b3ffc6210a8941e34cd245dfcd53171ea227dd -size 9758191 +oid sha256:a648bcbbe9f0fe0f4200fdbaaa1b8e1774f4b93d44a9b8fff0fa17ac47aa46e2 +size 9758216
diff --git a/icu4j/main/shared/data/testdata.jar b/icu4j/main/shared/data/testdata.jar index 2305640..6116589 100755 --- a/icu4j/main/shared/data/testdata.jar +++ b/icu4j/main/shared/data/testdata.jar
@@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bf6180a3cd404399287e993a5c2a46c63b8b2817dcfa88a2b8813d23a4247d98 -size 723668 +oid sha256:dfe9de2f2677b6b6df96de5fd715dbc0a7d304ddf26b3b6d41078e183528cc4e +size 723653
diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/calendar/JapaneseTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/calendar/JapaneseTest.java index cca9cdf..ce3fee7 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/calendar/JapaneseTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/calendar/JapaneseTest.java
@@ -148,9 +148,9 @@ Calendar cal = new JapaneseCalendar(loc); DateFormat enjformat = cal.getDateTimeFormat(0,0,new ULocale("en_JP@calendar=japanese")); DateFormat format = cal.getDateTimeFormat(0,0,loc); - ((SimpleDateFormat)format).applyPattern("y.M.d"); // Note: just 'y' doesn't work here. + ((SimpleDateFormat)format).applyPattern("y/M/d"); // Note: just 'y' doesn't work here. ParsePosition pos = new ParsePosition(0); - Date aDate = format.parse("1.1.9", pos); // after the start of heisei accession. Jan 1, 1H wouldn't work because it is actually showa 64 + Date aDate = format.parse("1/5/9", pos); // after the start of Reiwa accession. Jan 1, 1R wouldn't work because it is actually Heisei 31 String inEn = enjformat.format(aDate); cal.clear(); @@ -159,7 +159,7 @@ int gotEra = cal.get(Calendar.ERA); int expectYear = 1; - int expectEra = JapaneseCalendar.CURRENT_ERA; + int expectEra = JapaneseCalendar.CURRENT_ERA; // Reiwa if((gotYear != expectYear) || (gotEra != expectEra)) { errln("Expected year " + expectYear + ", era " + expectEra +", but got year " + gotYear + " and era " + gotEra + ", == " + inEn); @@ -167,7 +167,7 @@ logln("Got year " + gotYear + " and era " + gotEra + ", == " + inEn); } - // Test parse with missing era (should default to current era, heisei) + // Test parse with missing era (should default to current era) // Test parse with incomplete information logln("Testing parse w/ just year..."); Calendar cal2 = new JapaneseCalendar(loc); @@ -191,7 +191,7 @@ gotYear = cal2.get(Calendar.YEAR); gotEra = cal2.get(Calendar.ERA); expectYear = 1; - expectEra = JapaneseCalendar.CURRENT_ERA; + expectEra = JapaneseCalendar.CURRENT_ERA; // Reiwa if((gotYear != 1) || (gotEra != expectEra)) { errln("parse "+ samplestr + " of 'y' as Japanese Calendar, expected year " + expectYear + " and era " + expectEra + ", but got year " + gotYear + " and era " + gotEra + " (Gregorian:" + str +")"); @@ -370,5 +370,30 @@ doLimitsTest(jcal, null, cal.getTime()); doTheoreticalLimitsTest(jcal, true); } + + public void TestHeiseiToReiwa() { + Calendar cal = Calendar.getInstance(); + cal.set(2019, Calendar.APRIL, 29); + + DateFormat jfmt = DateFormat.getDateInstance(DateFormat.LONG, new ULocale("ja@calendar=japanese")); + + final String[] EXPECTED_FORMAT = { + "\u5E73\u621031\u5E744\u670829\u65E5", // Heisei 31 April 29 + "\u5E73\u621031\u5E744\u670830\u65E5", // Heisei 31 April 30 + "\u4EE4\u548C1\u5E745\u67081\u65E5", // Reiwa 1 May 1 + "\u4EE4\u548C1\u5E745\u67082\u65E5", // Reiwa 1 May 2 + }; + + for (int i = 0; i < EXPECTED_FORMAT.length; i++) { + Date d = cal.getTime(); + String dateStr = jfmt.format(d); + if (!EXPECTED_FORMAT[i].equals(dateStr)) { + errln("Formatting year:" + cal.get(Calendar.YEAR) + " month:" + (cal.get(Calendar.MONTH) + 1) + + " day:" + cal.get(Calendar.DATE) + " - expected: " + EXPECTED_FORMAT[i] + + " / actual: " + dateStr); + } + cal.add(Calendar.DATE, 1); + } + } }
diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/DebugUtilitiesData.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/DebugUtilitiesData.java index d06550d..9831ff6 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/DebugUtilitiesData.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/DebugUtilitiesData.java
@@ -1,4 +1,4 @@ -/** Copyright (C) 2007-2012, International Business Machines Corporation and Others. All Rights Reserved. **/ +/** Copyright (C) 2007-2019, International Business Machines Corporation and Others. All Rights Reserved. **/ /* NOTE: this file is AUTOMATICALLY GENERATED by gentest. * See: {ICU4C}/source/data/icu4j-readme.txt for more information. @@ -7,7 +7,7 @@ package com.ibm.icu.dev.test.util; public class DebugUtilitiesData extends Object { - public static final String ICU4C_VERSION="50.1.1"; + public static final String ICU4C_VERSION="50.1.2"; public static final int UDebugEnumType = 0; public static final int UCalendarDateFields = 1; public static final int UCalendarMonths = 2;