Javaの日付・時刻における時間フィールド(TemporalField)とは?ChronoFieldの使い方を解説
テンポラルフィールド(時間フィールド)とは
テンポラルフィールド(temporal field)とは、「月の中の日」や「時」など、日付や時刻を構成する個々の項目(フィールド)のことです。Javaでは、これらのフィールドはTemporalFieldインターフェースとして表現され、標準的なフィールド定義はjava.time.temporal.ChronoFieldクラス(enum)によって提供されています。
LocalDateTimeクラスのget()メソッドおよびgetLong()メソッドは、引数としてテンポラルフィールドを受け取り、現在のオブジェクトが保持するそのフィールドの値を取得できます。値がint型の範囲に収まる場合はget()を、収まらない可能性がある場合はgetLong()を使用します。
主なChronoFieldの定数
| 定数 | 意味 |
|---|---|
| DAY_OF_MONTH | 月の中の日(1〜31) |
| DAY_OF_WEEK | 曜日(1=月曜〜7=日曜) |
| DAY_OF_YEAR | 年の中の日(1〜366) |
| EPOCH_DAY | 1970-01-01からの経過日数 |
| ERA | 紀元(西暦なら1) |
| CLOCK_HOUR_OF_AMPM | 午前・午後単位の時(1〜12) |
| AMPM_OF_DAY | 午前(0)/午後(1) |
| CLOCK_HOUR_OF_DAY | 時(1〜24) |
| MINUTE_OF_DAY | その日の経過分数(0〜1439) |
| MINUTE_OF_HOUR | 分(0〜59) |
| SECOND_OF_DAY | その日の経過秒数(0〜86399) |
| SECOND_OF_MINUTE | 秒(0〜59) |
日付関連のフィールドを取得する例
次の例では、現在日時から日付に関連するテンポラルフィールドの値を取得しています。
import java.time.LocalDateTime;
import java.time.temporal.ChronoField;
public class Demo {
public static void main(String args[]) {
// LocalDateTimeクラスのインスタンスを生成
LocalDateTime lDate = LocalDateTime.now();
int field = lDate.get(ChronoField.DAY_OF_MONTH);
System.out.println("月の中の日: " + field);
field = lDate.get(ChronoField.DAY_OF_WEEK);
System.out.println("曜日: " + field);
field = lDate.get(ChronoField.DAY_OF_YEAR);
System.out.println("年の中の日: " + field);
long epoch = lDate.getLong(ChronoField.EPOCH_DAY);
System.out.println("エポック日: " + epoch);
field = lDate.get(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH);
System.out.println("月内の整列曜日: " + field);
field = lDate.get(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR);
System.out.println("年内の整列曜日: " + field);
field = lDate.get(ChronoField.ERA);
System.out.println("紀元: " + field);
}
}
実行結果
月の中の日: 25 曜日: 5 年の中の日: 237 エポック日: 17403 月内の整列曜日: 4 年内の整列曜日: 6 紀元: 1
時刻関連のフィールドを取得する例
次の例では、時刻に関連するテンポラルフィールドの値を取得しています。
import java.time.LocalDateTime;
import java.time.temporal.ChronoField;
public class CreateDateTime {
public static void main(String args[]) {
// LocalDateTimeクラスのインスタンスを生成
LocalDateTime lDateTime = LocalDateTime.now();
System.out.println(lDateTime);
int field = lDateTime.get(ChronoField.CLOCK_HOUR_OF_AMPM);
System.out.println("午前・午後単位の時: " + field);
field = lDateTime.get(ChronoField.AMPM_OF_DAY);
System.out.println("AM/PM: " + field);
field = lDateTime.get(ChronoField.CLOCK_HOUR_OF_DAY);
System.out.println("時: " + field);
long minuteOfDay = lDateTime.getLong(ChronoField.MINUTE_OF_DAY);
System.out.println("日の経過分: " + minuteOfDay);
field = lDateTime.get(ChronoField.MINUTE_OF_HOUR);
System.out.println("分: " + field);
field = lDateTime.get(ChronoField.SECOND_OF_DAY);
System.out.println("日の経過秒: " + field);
field = lDateTime.get(ChronoField.SECOND_OF_MINUTE);
System.out.println("秒: " + field);
}
}
実行結果
2020-11-11T14:58:22.680 午前・午後単位の時: 2 AM/PM: 1 時: 14 日の経過分: 898 分: 58 日の経過秒: 53902 秒: 22
このように、ChronoFieldの各定数をget()/getLong()に渡すだけで、日付・時刻の任意の構成要素を簡単に取り出せます。なお、実行結果はプログラムを実行したタイミングによって異なる点に注意してください。
-
JavaのLayoutManager(レイアウトマネージャー)とは?6つの種類と使い方を解説
LayoutManager(レイアウトマネージャー)は、GUIフォーム上に視覚コンポーネントをどのように配置するかを制御するための仕組みです。コンテナ内における各コンポーネントのサイズと位置を自動的に決定することで、ウィンドウサイズが変わっても整然としたユーザーインターフェースを維持できます。 LayoutManagerの種類 Javaには、標準で以下の6種類のレイアウトマネージャーが用意されています。 FlowLayout(フローレイアウト):コンポーネントをページ上の文章のように配置します。上段から左から右へ、上から下へと順に詰めていき、追加された順序どおりに並びます。最初のコンポーネン
-
Javaで現在の日付・時刻を取得する3つの方法(LocalDate / LocalTime / LocalDateTime)
Javaで現在の日付や時刻を取得したいと思ったことはありませんか?このチュートリアルでは、Java 8以降で利用できる3つの異なる方法を、サンプルコードとともにわかりやすく解説します。 日付や時刻の表示に使用する主なクラスは、LocalDate、LocalTime、LocalDateTime の3つです。これらはすべて java.time パッケージに含まれており、従来の Date や Calendar クラスに比べて直感的で扱いやすいのが特徴です。 現在の日付を取得する LocalDate クラスは、タイムゾーン情報を持たない「日付」を表すために使用します。 GetCurrentDate.j