ICU-20536 Japanese era Reiwa support in ICU4J 60

This commit is contained in:
yumaoka 2019-04-05 22:26:50 -04:00 committed by Yoshito Umaoka
parent 76d09144a6
commit 223d4fb7e6
4 changed files with 39 additions and 13 deletions

View file

@ -562,6 +562,7 @@ public class JapaneseCalendar extends GregorianCalendar {
1912, 7, 30, // Taisho
1926, 12, 25, // Showa
1989, 1, 8, // Heisei
2019, 5, 1, // Reiwa
};
//-------------------------------------------------------------------------
@ -578,25 +579,25 @@ public class JapaneseCalendar extends GregorianCalendar {
* 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

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:08b5e318e71b41ef7605476fed267cc099c2d5952a3f940e78553234b33031b0
size 12475402
oid sha256:b4bb7c8dd5ace0696e48868365acd637dde8f6cb27fad9b1b4e9926928bff3bc
size 12475560

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:134ccd4e0d1e6a82b01cac359f7e0ba4b2263508d44adb2a6a953564502caa13
size 813101
oid sha256:484f4626fecf6ca5b31b5cc93fd7ad8873c4fbf6f63e568572de7a9ca281e1d1
size 813148

View file

@ -154,9 +154,9 @@ public class JapaneseTest extends CalendarTestFmwk {
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, R1 wouldn't work because it is actually Heisei 31
String inEn = enjformat.format(aDate);
cal.clear();
@ -165,7 +165,7 @@ public class JapaneseTest extends CalendarTestFmwk {
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);
@ -173,7 +173,7 @@ public class JapaneseTest extends CalendarTestFmwk {
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);
@ -197,7 +197,7 @@ public class JapaneseTest extends CalendarTestFmwk {
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 +")");
@ -379,5 +379,30 @@ public class JapaneseTest extends CalendarTestFmwk {
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);
}
}
}