How to parse

2020-03-14 06:26发布

问题:

How to parse Japanese era date string inputs into LocalDate/LocalDateTime via Java 8 DateTime API?

Example Japanese calendar dates;

明治23年11月29日
昭和22年5月3日
平成23年3月11日(金)14時46分
令和5年1月11日

回答1:

It is achieved by utilizing DateTimeFormatter in the following manner;

DateTimeFormatter japaneseEraDtf = DateTimeFormatter.ofPattern("GGGGy年M月d日")
        .withChronology(JapaneseChronology.INSTANCE)
        .withLocale(Locale.JAPAN);

where GGGG in the pattern is the designator for the Japanese characters representing the era
(e.g. 平成 Heisei), and the rest with year/month/day values with their respective Japanese characters: y年 for year, M月 for the month, d日 for the day.

LocalDate.parse("明治23年11月29日", japaneseEraDtf);
LocalDate.parse("昭和22年5月3日", japaneseEraDtf);
LocalDate.parse("令和5年1月11日", japaneseEraDtf);

will give out;

1890-11-29
1947-05-03
2023-01-11

For LocalDateTime, by using the updated pattern "GGGGy年M月d日(E)HH時mm分" in japaneseEraDtf;

LocalDateTime.parse("平成23年3月11日(金)14時46分", japaneseEraDtf);

will result in;

2011-03-11T14:46