ImmutableでスレッドセーフになったJavaの新しい日時APIの基礎知識:ここが大変だよJava 8 Date-Time API(1)(5/5 ページ)
Date-Time APIの概要や、Java 8より前の旧日時APIから何が改善されたのかに加え、新しく追加されたさまざまなクラスについて解説します。
和暦を表すクラス(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.
関連記事
- 初心者のためのJavaラムダ式入門とJDKのインストール、IDEの環境構築
本連載では、今までJavaの経験はあっても「ラムダ式は、まだ知らない」という人を対象にラムダ式について解説していきます。初回は、ラムダ式の概要と利点、必要性、JDK 8のセットアップ、NetBeans、IntelliJ IDEA、Eclipseの環境構築について。 - ラムダ式、JAR脱獄、JavaScript/Node.jsに接近するJDK 8、そして9へ
- Java 8&Java EE 7に対応した「Spring Framework 4.0」正式版リリース
米Pivotalは2013年12月12日、オープンソースのJavaアプリケーションフレームワーク「Spring Framework 4.0」の正式版をリリースした。 - JDK 8、TLS 1.2がデフォルトに
Javaの通信暗号化もTSL 1.2に。基本的に後方互換性は維持するが、一部影響がある場合もあるという。