検索
連載

ImmutableでスレッドセーフになったJavaの新しい日時APIの基礎知識ここが大変だよJava 8 Date-Time API(1)(5/5 ページ)

Date-Time APIの概要や、Java 8より前の旧日時APIから何が改善されたのかに加え、新しく追加されたさまざまなクラスについて解説します。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

和暦を表すクラス(JapaneseDate)

 Java 8から導入されたDate-Time APIでは、ISO 8601の規格とは異なるカレンダーシステムを扱える仕組みをjava.time.chronoパッケージに用意されています。その中には和暦を表すJapaneseDateクラスがあります。

 和暦は明治6年(西暦1873年)からグレゴリオ暦が導入されたこともあり、1873年1月1日から使うことが可能になっています。JapaneseDateで用意されている年号とその期間は下記になり、その年号を表すJapaneseEraというクラスも用意されています。

年号 JapaneseEra 期間
明治 MEIJI 1868年1月1日 〜 1912年7月29日
大正 TAISHO 1912年7月30日 〜 1926年12月24日
昭和 SHOWA 1926年12月25日 〜 1989年1月7日
平成 HEISEI 1989年1月8日以降
JapaneseDate japaneseDate = JapaneseDate.of(1873, 1, 1);
System.out.println(japaneseDate);
japaneseDate = JapaneseDate.of(1912, 7, 29);
System.out.println(japaneseDate);
japaneseDate = JapaneseDate.of(1912, 7, 30);
System.out.println(japaneseDate);
japaneseDate = JapaneseDate.of(1926, 12, 24);
System.out.println(japaneseDate);
japaneseDate = JapaneseDate.of(1926, 12, 25);
System.out.println(japaneseDate);
japaneseDate = JapaneseDate.of(1989, 1, 7);
System.out.println(japaneseDate);
japaneseDate = JapaneseDate.of(1989, 1, 8);
System.out.println(japaneseDate);
サンプル
Japanese Meiji 6-01-01
Japanese Meiji 45-07-29
Japanese Taisho 1-07-30
Japanese Taisho 15-12-24
Japanese Showa 1-12-25
Japanese Showa 64-01-07
Japanese Heisei 1-01-08
実行結果

 また、ofメソッドには前述のように西暦の年を指定してインスタンスを生成するメソッドと、引数に年号としてJapaneseEraを受け取りインスタンスも用意されています。また、その生成されたインスタンスから年号のインスタンスの取得と和暦での年の取得も可能になっています。

JapaneseDate japaneseDate = JapaneseDate.of(JapaneseEra.HEISEI, 15, 1, 1);
System.out.println(japaneseDate);
 
System.out.println("japaneseDate.getEra()=" + japaneseDate.getEra());
System.out.println("japaneseDate.get(ChronoField.YEAR_OF_ERA)=" + japaneseDate.get(ChronoField.YEAR_OF_ERA));
サンプル
Japanese Heisei 15-01-01
japaneseDate.getEra()=Heisei
japaneseDate.get(ChronoField.YEAR_OF_ERA)=15
実行結果

 注意点として、このJapaneseDateがサポートしている明治6年(西暦1873年)より前の日付を持たせようとすると例外が発生します。

JapaneseDate japaneseDate = JapaneseDate.of(1872, 12, 31);
System.out.println(japaneseDate);
japaneseDate = JapaneseDate.of(1912, 1, 1);
System.out.println(japaneseDate);
サンプル
Exception in thread "main" java.time.DateTimeException: JapaneseDate before Meiji 6 is not supported
	at java.time.chrono.JapaneseDate.<init>(Unknown Source)
	at java.time.chrono.JapaneseDate.of(Unknown Source)
	at jp.co.atmarkit.java.datetimeapi.JapaneseDateSample03.main(JapaneseDateSample03.java:8)
実行結果

次回は、Date-Time APIのクラスを使って何ができるのか

 今回はJava 8から導入されたDate-Time APIについて、それまでの旧日時APIからの改善点とDate-Time APIで新たに追加されたクラスなどについて見てきました。

 この他にもClockなどのクラスもありますが、今回は主に使われると思われるクラスをメインに説明するため省かせていただきました。気になる方はjava.timeパッケージとその下のパッケージのJavaDocや、英文ですがオラクルのDate-Time APIのチュートリアルを参照してください。

 次回は、今回の記事でDate-Time APIで用意されているクラスを学びましたので、それらのDate-Time APIのクラスを使って何ができるのか、用意されているメソッドについて見ていきます。

著者プロフィール

長谷川 智之(はせがわ ともゆき)

株式会社ビーブレイクシステムズ開発部所属。

社内サークル執筆チーム在籍。

主な執筆。

@IT連載『Javaの常識を変えるPlay framework入門

日経ソフトウェア連載『コツコツ学ぶAndroidネイティブアプリ開発教室』


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る