<i18n dev> JDK-8042131: Proposal of Mapped-values formatter for non-IsoChronology
naoto.sato at oracle.com
naoto.sato at oracle.com
Fri Jun 15 16:04:13 UTC 2018
It does seem to be a good change. I will take a look and sponsor it.
Naoto
On 6/15/18 7:38 AM, Roger Riggs wrote:
> Hi,
>
> A good suggestion to reconsider, I re-opened the issue.
>
> I have not looked closely to see if/where the spec needs to be changed.
>
> Thanks, Roger
>
>
> On 6/15/18 5:30 AM, Stephen Colebourne wrote:
>> 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