Date and Time APIについて調べてみた その2

【前提条件】

[環境]
[参考資料]

Java8 APIドキュメント
http://docs.oracle.com/javase/jp/8/api/

【概要】

前回はDate and Time APIのオブジェクトの生成方法を
調べたので今回は各フィールドの取得方法を調べてみました。

【getXXX】

過去のバージョンではCalendar#getメソッドを
使って各フィールドの値を取得していましたが、
Date and Time APIではフィールドごとにメソッドが用意されています。

[サンプルコード]
    public static void sampleGetHoge() {

        final LocalDateTime now = LocalDateTime.now();
        System.out.println("Year : " + now.getYear());
        System.out.println("Month : " + now.getMonth());
        System.out.println("MonthValue : " + now.getMonthValue());
        System.out.println("DayOfMonth : " + now.getDayOfMonth());
        System.out.println("DayOfWeek : " + now.getDayOfWeek());
        System.out.println("DayOfYear : " + now.getDayOfYear());
        System.out.println("Hour : " + now.getHour());
        System.out.println("Minute : " + now.getMinute());
        System.out.println("Second : " + now.getSecond());
        System.out.println("Nano : " + now.getNano());
    } 

メソッド名のとおりのフィールドが取得できます。

getMonthメソッドはMonthオブジェクトが返却され、
getDayOfWeekメソッドはDayOfWeekオブジェクトが返却されます。

[実行結果]
Year : 2014
Month : JUNE
MonthValue : 6
DayOfMonth : 8
DayOfWeek : SUNDAY
DayOfYear : 159
Hour : 14
Minute : 42
Second : 50
Nano : 601000000

【getメソッド】

基本的な項目はgetXXX系のメソッドで取得できますが、
その他の項目についてはgetメソッドを使います。

getメソッドはCalendar#getと同じ様なメソッドです。

[サンプルコード]
    public static void sampleGet() {

        final LocalDateTime now = LocalDateTime.now();
        System.out.println("Get(YEAR) : " + now.get(ChronoField.YEAR));
        System.out.println("Get(MONTH_OF_YEAR) : " + now.get(ChronoField.MONTH_OF_YEAR));
        System.out.println("Get(DAY_OF_MONTH) : " + now.get(ChronoField.DAY_OF_MONTH));

        System.out.println("Get(MILLI_OF_DAY) : " + now.getLong(ChronoField.MILLI_OF_DAY));
        System.out.println("Get(NANO_OF_DAY) : " + now.getLong(ChronoField.MICRO_OF_DAY));
        System.out.println("Get(NANO_OF_DAY) : " + now.getLong(ChronoField.NANO_OF_DAY));
    }

getメソッドのパラメータの型はTemporalFieldインターフェイスのオブジェクトです。

インターフェイスなので独自のものを作成することが出来ますが、
汎用的なフィールドはChronoFieldクラスに定義されています。
サンプルでは年月日と一日内のミリ秒・マイクロ秒・ナノ秒を取得しています。

[実行結果]
Get(YEAR) : 2014
Get(MONTH_OF_YEAR) : 6
Get(DAY_OF_MONTH) : 8
Get(MILLI_OF_DAY) : 53398774
Get(MICRO_OF_DAY) : 53398774000
Get(NANO_OF_DAY) : 53398774000000

各フィールドが取得できています。

ただし、マイクロ秒・ナノ秒に関しては全て0になっています。
単純にnowメソッドを呼び出しただけでは設定されないようです。

JDKの起動パラメータなどを指定すれば出来るかも?

【まとめ】

よく使うフィールドについてはgetXXXメソッドで
直接呼べるようになったので
少しはIDEの補完がされやすくなったのかなと思います。

getメソッドも取得できる項目が増えているものの
使用頻度が高いわけでもないと思うので、
恩恵はあまりないかもしれません。