May 17, 2010
icu4j で和暦の parse
何回かやってるんだけど、忘れてしまうのでメモ。
IBM の国際化ライブラリ ICU のは、数値や通貨やカレンダーの国際化に役立つライブラリ。Java 用には icu4j がある。博物館のデータではあちこちに和暦が登場するのだけれど、西暦に変換したいこともよくある。で、Java SE 6 では JapaneseCalendar で元号がサポートされたとはいえ、明治以降だけなので全然使えません。というわけで、icu4j を使って日本の元号で書かれた年代を西暦(グレゴリオ暦)の普通の日付に変換するコード。
JapaneseCalendar jcal = new JapaneseCalendar(); DateFormatSymbols dfs = new DateFormatSymbols(jcal, Locale.JAPANESE); DateFormat sdf = new SimpleDateFormat("Gy年M月d日", dfs); sdf.setCalendar(jcal); Date date = sdf.parse("天保11年1月1日"); System.out.println(date);
結果は、
Wed Jan 01 00:00:00 JST 1840
と。ただこれ、元号だけでいわゆる旧暦(太陰太陽暦)のことは、というかつまり月日までは考えてません。自分の仕事ではそこはあまり問題になることがないので…。