Hi Matsushima-san,

Thank you for the further information on the issue. I attached your observation in the bug report. I will fix it along with the supplemental era's short name inconsistency.

Naoto

On 6/22/17 1:36 PM, Mitsuru Matsushima wrote:
At the Comparison table, I added the "Supplemental Era" behavior and 
"Expected?" behavior.
Japanese usually use '平' or 'H' for abbreviated name of "平成".
Thus, I think it's useful that the both of them are usable.
So I added the "Expected?" behavior.
(Ah, however it seems difficult that different behavior for short form...)
(I don't know why CLDR don't describe wide name for Japanese era and why 
describe wide name as abbreviated name.)

Comparison table:
=======================================
                   | SimpleDateFormat| DateTimeFormatter
                   |--------|--------|--------|--------|--------
                   | Full   | Short  | Full   | Short  | Narrow
------------------|--------|--------|--------|--------|--------
  COMPAT           | 平成   | H      | 平成   | H      | H
  CLDR             | 平成   | 平成   | 平成   | 平成   | H
  HOST             | 平成   | 平     | 平成   | 平     | 平成
------------------|--------|--------|--------|--------|--------
  Supplemental Era | NewEra | N.E    | NewEra | N.E    | N.E
------------------|--------|--------|--------|--------|--------
  Expected?        | 平成   | H      | 平成   | 平     | H
=======================================


Test code:
Execute with java.locale.provider system property.
=======================================
public class SupplementalEraTest2 {

     public static void main(String... args) {
         System.out.println("java.locale.providers="
                 + System.getProperty("java.locale.providers"));
         // set supplemental era
         System.setProperty(
                 "jdk.calendar.japanese.supplemental.era",
                 "name=NewEra,abbr=N.E,since=1546300800000");

         final int[][] dateSrcs = {
             //{1989, 1, 7}, {1989, 1, 8}, // Heisei before and after
             {2018, 12, 31}, {2019, 1, 1}, // NewEra before and after
         };

         System.out.println(">>>>> SimpleDateFormat");
         printWithSimpleDateFormat(dateSrcs);

         System.out.println(">>>>> DateTimeFormatter");
         printWithDateTimeFormatter(dateSrcs);
     }

     private static void printWithSimpleDateFormat(int[][] dateSrcs) {
         final Locale jpLocale = new Locale("ja", "JP", "JP");
         final Calendar cal = Calendar.getInstance();
         final Date[] dates = Arrays.stream(dateSrcs)
                 .map((int[] d) -> {  // first month is 0
                     cal.set(d[0], d[1] - 1, d[2], 0, 0, 0);
                     return cal.getTime();
                 }).toArray(Date[]::new);
         System.out.println("---Full format");
         SimpleDateFormat fmtLong = new SimpleDateFormat(
                 "GGGG", jpLocale);
         Arrays.stream(dates).map(fmtLong::format).forEach(System.out::println);
         System.out.println("---Short format");
         SimpleDateFormat fmtShort = new SimpleDateFormat(
                 "G", jpLocale);
         
Arrays.stream(dates).map(fmtShort::format).forEach(System.out::println);
     }

     private static void printWithDateTimeFormatter(int[][] dateSrcs) {
         final Locale jpLocale = new Locale("ja", "JP", "JP");
         final LocalDate[] lDates = Arrays.stream(dateSrcs)
                 .map((int[] d) -> LocalDate.of(d[0], d[1], d[2]))
                 .toArray(LocalDate[]::new);
         System.out.println("---Full format");
         final DateTimeFormatter fmtrFull = DateTimeFormatter.ofPattern("GGGG")
                 
.withChronology(JapaneseChronology.INSTANCE).withLocale(jpLocale);
         
Arrays.stream(lDates).map(fmtrFull::format).forEach(System.out::println);

         System.out.println("---Short format");
         DateTimeFormatter fmtrShort = DateTimeFormatter.ofPattern("G")
                 
.withChronology(JapaneseChronology.INSTANCE).withLocale(jpLocale);
         
Arrays.stream(lDates).map(fmtrShort::format).forEach(System.out::println);

         System.out.println("---Narrow format");
         DateTimeFormatter fmtrNarrow = DateTimeFormatter.ofPattern("GGGGG")
                 
.withChronology(JapaneseChronology.INSTANCE).withLocale(jpLocale);
         
Arrays.stream(lDates).map(fmtrNarrow::format).forEach(System.out::println);
     }
}
=======================================

Reply via email to