>From the looks of it, this is a perfectly reasonable enhancement. Sadly I can't sponsor it as I'm not a committer.
Stephen On 15 June 2018 at 10:10, Toshio 5 Nakamura <toshi...@jp.ibm.com> wrote: > > Hello core-libs and i18n folks, > > We'd like to request to reconsider JDK-8042131, > "DateTimeFormatterBuilder Mapped-values do not work for JapaneseDate". > The report was posted by our team long time ago, and was closed as not an > issue. > At that time, the feature was for only IsoChronology. > > Now, I found the attached patch can activate the mapped-values formatter > for > non-IsoChronology. > > Additionally, the Japanese new era will be expected in May 2019. The first > year of > each era has a special expression in Japanese, "U+5143 U+5e74" (Gannen). > java.util.JapaneseImperialCalendar uses this expression. > We'd like to use the expression with JapaneseChronology by mapped-values > formatter as an option. > > Can we have a sponsor of this proposal? > > --sample usage of Japanese new era-- > DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder(); > Map<Long, String> yearMap = new HashMap<>(); > yearMap.put(1L, "\u5143"); > builder.appendText(ChronoField.ERA, TextStyle.FULL) > .appendText(ChronoField.YEAR_OF_ERA, yearMap) > .appendLiteral("\u5e74"); > --------------- > > Report: > https://bugs.openjdk.java.net/browse/JDK-8042131 > > Patch: > --- > old/src/java.base/share/classes/java/time/format/DateTimeFormatterBuilder.java > 2018-06-15 17:39:11.489303979 +0900 > +++ > new/src/java.base/share/classes/java/time/format/DateTimeFormatterBuilder.java > 2018-06-15 17:39:11.157303972 +0900 > @@ -793,6 +793,11 @@ > final LocaleStore store = new LocaleStore(map); > DateTimeTextProvider provider = new DateTimeTextProvider() { > @Override > + public String getText(Chronology chrono, TemporalField field, > + long value, TextStyle style, Locale > locale) { > + return store.getText(value, style); > + } > + @Override > public String getText(TemporalField field, long value, TextStyle > style, Locale locale) { > return store.getText(value, style); > } > --- > old/test/jdk/java/time/test/java/time/format/TestDateTimeFormatterBuilderWithLocale.java > 2018-06-15 17:39:12.664304007 +0900 > +++ > new/test/jdk/java/time/test/java/time/format/TestDateTimeFormatterBuilderWithLocale.java > 2018-06-15 17:39:12.298303999 +0900 > @@ -67,14 +67,21 @@ > import java.time.chrono.Chronology; > import java.time.chrono.IsoChronology; > import java.time.chrono.JapaneseChronology; > +import java.time.chrono.JapaneseEra; > import java.time.chrono.MinguoChronology; > +import java.time.chrono.ThaiBuddhistChronology; > +import java.time.chrono.ChronoLocalDate; > import java.time.format.DateTimeFormatter; > import java.time.format.DateTimeFormatterBuilder; > import java.time.format.FormatStyle; > import java.time.LocalDate; > import java.time.temporal.Temporal; > +import java.time.temporal.ChronoField; > +import static java.time.temporal.ChronoUnit.YEARS; > > import java.util.Locale; > +import java.util.Map; > +import java.util.HashMap; > > import static org.testng.Assert.assertEquals; > > @@ -115,6 +122,31 @@ > } > > //----------------------------------------------------------------------- > + @DataProvider(name="mappedPatterns") > + Object[][] localizedMappedPatterns() { > + return new Object[][] { > + {IsoChronology.INSTANCE.date(1,1,1), Locale.ENGLISH}, > + {JapaneseChronology.INSTANCE.date(JapaneseEra.HEISEI, > + 1,1,8), Locale.ENGLISH}, > + {MinguoChronology.INSTANCE.date(1,1,1), Locale.ENGLISH}, > + {ThaiBuddhistChronology.INSTANCE.date(1,1,1), Locale.ENGLISH}, > + }; > + } > + > + @Test(dataProvider="mappedPatterns") > + public void test_getLocalizedMappedPattern(ChronoLocalDate date, Locale > locale) { > + final String new1st = "1st"; > + Map<Long, String> yearMap = new HashMap<>(); > + yearMap.put(1L, new1st); > + DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder(); > + builder.appendText(ChronoField.YEAR_OF_ERA, yearMap); > + > + String actual = date.format(builder.toFormatter(locale)); > + assertEquals(actual, new1st); > + } > + > + > + //----------------------------------------------------------------------- > @DataProvider(name="localePatterns") > Object[][] localizedDateTimePatterns() { > return new Object[][] { > > --- > Best regards, > Toshio Nakamura, IBM Japan