Javaの時間フィールド(TemporalField)とは?ChronoFieldの使い方を徹底解説
時間フィールド(Temporal Field)とは、「月」「時」「分」など、日時を構成する個々の要素を表すフィールドのことです。Javaでは、これらのフィールドは TemporalField インターフェースによって表現され、java.time.temporal.ChronoField クラスがこのインターフェースを実装しています。
以下に、ChronoField クラスがサポートしている主な時間に関するフィールドの一覧を示します。
ChronoFieldの主な時間フィールド一覧
| フィールド | 説明 |
|---|---|
| CLOCK_HOUR_OF_AMPM | 午前・午後単位の時計の時刻(1〜12)を表します。 |
| AMPM_OF_DAY | その日の午前(AM=0)または午後(PM=1)を表します。 |
| CLOCK_HOUR_OF_DAY | 1日における時計の時刻(1〜24)を表します。 |
| HOUR_OF_AMPM | 午前・午後単位の時(0〜11)を表します。 |
| HOUR_OF_DAY | 1日における時(0〜23)を表します。 |
| INSTANT_SECONDS | エポック(1970-01-01T00:00:00Z)からの経過秒数を表します。 |
| MICRO_OF_DAY | 1日の中でのマイクロ秒を表します。 |
| MICRO_OF_SECOND | 1秒の中でのマイクロ秒を表します。 |
| MILLI_OF_DAY | 1日の中でのミリ秒を表します。 |
| MILLI_OF_SECOND | 1秒の中でのミリ秒を表します。 |
| MINUTE_OF_DAY | 1日の中での分(0〜1439)を表します。 |
| MINUTE_OF_HOUR | 1時間の中での分(0〜59)を表します。 |
| MONTH_OF_YEAR | 年の中での月(1〜12)を表します。 |
| NANO_OF_DAY | 1日の中でのナノ秒を表します。 |
| NANO_OF_SECOND | 1秒の中でのナノ秒を表します。 |
| OFFSET_SECONDS | UTC/グリニッジ標準時からのオフセット秒を表します。 |
| PROLEPTIC_MONTH | 先発グレゴリオ暦に基づく通算の月を表します。 |
| SECOND_OF_DAY | 1日の中での秒(0〜86399)を表します。 |
| SECOND_OF_MINUTE | 1分の中での秒(0〜59)を表します。 |
LocalDate や LocalTime などの日時クラスが持つ get() メソッドや getLong() メソッドは、引数として時間フィールドを受け取り、現在のオブジェクトから該当フィールドの値を取得できます。値が int 型に収まる場合は get()、大きな値の場合は getLong() を使用します。
サンプルコード
import java.time.LocalTime;
import java.time.temporal.ChronoField;
public class Demo {
public static void main(String args[]) {
// LocalTimeクラスのインスタンスを生成
LocalTime lTime = LocalTime.now();
System.out.println(lTime);
int field = lTime.get(ChronoField.CLOCK_HOUR_OF_AMPM);
System.out.println("午前・午後単位の時刻: " + field);
field = lTime.get(ChronoField.AMPM_OF_DAY);
System.out.println("午前または午後: " + field);
field = lTime.get(ChronoField.CLOCK_HOUR_OF_DAY);
System.out.println("1日における時刻: " + field);
long epoch = lTime.getLong(ChronoField.MINUTE_OF_DAY);
System.out.println("1日における分: " + epoch);
field = lTime.get(ChronoField.MINUTE_OF_HOUR);
System.out.println("1時間における分: " + field);
field = lTime.get(ChronoField.SECOND_OF_DAY);
System.out.println("1日における秒: " + field);
field = lTime.get(ChronoField.SECOND_OF_MINUTE);
System.out.println("1分における秒: " + field);
}
}実行結果
17:02:46.294 午前・午後単位の時刻: 5 午前または午後: 1 1日における時刻: 17 1日における分: 1022 1時間における分: 2 1日における秒: 61366 1分における秒: 46
このように、ChronoField の各フィールドを指定することで、同じ LocalTime オブジェクトからさまざまな単位で時刻情報を柔軟に取り出すことができます。日付・時刻を細かく操作したい場合に非常に便利な機能なので、ぜひ活用してみてください。
-
Javaのクラスメソッド(静的メソッド)とは?基本から使い方まで解説
Javaにおけるクラスメソッド(静的メソッド)とは、特定のオブジェクトのインスタンスではなく、クラスそのものに対して呼び出されるメソッドのことです。static修飾子を付けることで、すべてのクラスインスタンス間で同じ実装が保証されます。静的メソッドはインスタンス化せずに呼び出すことができるため、アクセスできるのはクラス内の他の静的メンバー(staticなフィールドやメソッド)のみです。インスタンス変数や非staticメソッドには直接アクセスできない点に注意しましょう。Javaの標準ライブラリにも多くの静的メソッドが用意されています。代表的な例としては、Math.random()、System.
-
Javaにおける到達不能なcatchブロックとは?原因とコンパイルエラーの仕組みを解説
到達不能ブロック(Unreachable Block)とはどのような状況でも制御が決して到達しない文のまとまりは、到達不能ブロック(unreachable block)と呼ばれます。Javaでは、このような到達不能なコードはサポートされておらず、コンパイルエラーとなります。特に複数のcatchブロックを記述する場合には注意が必要です。Exceptionクラスを参照するcatchブロックは必ず最後に配置しなければなりません。これは、Exceptionがすべての例外クラスのスーパークラス(親クラス)であるためです。つまり、複数のcatchブロックを並べる際には、具体的な例外クラスから順に、より一般