<i18n dev> Question about jdk.calendar.japanese.supplemental.era

Yoshito Umaoka y.umaoka at gmail.com
Thu Sep 18 23:44:34 UTC 2014


In July, Okutsu-san sent a review request for JDK-8048123.
I found this is very useful as temporary workaround until new Java patch 
embedding the new era.

However, I think I found one issue. If you use java.util.Calendar, with 
locale ja-JP-u-ca-japanese, it seems to work as you expect. However, 
with new java.time package, era field prints out integer value of era. 
Below is an example code which reproduce the issue.

// Pseudo new era
// 1602288000000L => 2020-10-10 / Heisei 32-10-10
System.setProperty("jdk.calendar.japanese.supplemental.era",
"name=新元号,abbr=N,since=1602288000000");

// The day before the switch over
ChronoLocalDate date = JapaneseDate.of(JapaneseEra.HEISEI, 32, 10, 9);

DateTimeFormatter fmt = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL)
.withChronology(JapaneseChronology.INSTANCE).withLocale(Locale.JAPAN);

System.out.println(fmt.format(date)); // Output: "平成32年10月9日"

// Plus one day
date = date.plus(1, ChronoUnit.DAYS);

System.out.println(fmt.format(date)); // Output: "31年10月10日"


The output above becomes "31年10月10日", which is actually composed by 
Era "3" + Year-Month-Day "1年10月10日".
So, java.time.format.DateTimeFormatter does not use era name defined in 
the property, instead, use era's integer value.

In addition to this, the equivalent code with old java.util.Calendar below:

// Pseudo new era
// 1602288000000L => 2020-10-10 / Heisei 32-10-10
System.setProperty("jdk.calendar.japanese.supplemental.era",
"name=新元号,abbr=N,since=1602288000000");

Locale loc = Locale.forLanguageTag("ja-JP-u-ca-japanese");
Calendar cal = Calendar.getInstance(loc);
cal.set(32, 10 - 1, 9); // Set October 9, Heisei 32

DateFormat fmt = DateFormat.getDateInstance(DateFormat.FULL, loc);
System.out.println(fmt.format(cal.getTime())); // Output: 平成32年10月9日

// plus one day
cal.add(Calendar.DATE, 1);

System.out.println(fmt.format(cal.getTime())); // Output: 新元号元年10月10日

prints out "元年" (which is correct) instead of "1年" (which is 
acceptable, but not correct). This is not related to new era switch over 
actually, but it should be fixed.

Are you aware of these issues?

-Yoshito




More information about the i18n-dev mailing list