<i18n dev> JDK-8042131: Proposal of Mapped-values formatter for non-IsoChronology
Stephen Colebourne
scolebourne at joda.org
Fri Jun 15 09:30:44 UTC 2018
>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 <TOSHIONA at 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
More information about the core-libs-dev
mailing list