Java LocalDate get メソッド

JavaBeginner
オンラインで実践に進む

はじめに

この実験(Lab)では、Java のLocalDateクラスのget()メソッドを使用して、日付から特定のフィールドを取得する方法を学びます。このメソッドは、特定のフィールド(月の何日目や週の何曜日など)だけを、与えられた日付から取得する必要がある場合に役立ちます。ChronoField列挙型を使用して、どのフィールドを取得するかを指定できます。

Java ファイルの作成

このステップでは、プロジェクトディレクトリにLocalDateGet.javaという名前の新しい Java ファイルを作成します。このファイルには、LocalDateクラスのget()メソッドをデモンストレーションするためのコードが含まれます。

  1. WebIDE でターミナルを開きます。デフォルトのディレクトリは~/projectです。

  2. touchコマンドを使用して、LocalDateGet.javaファイルを作成します。

    touch LocalDateGet.java
    

    このコマンドは、現在のディレクトリに空のファイルを作成します。ファイルの作成を確認するには、ファイルを一覧表示します。

    ls
    

    出力にLocalDateGet.javaが表示されるはずです。

必要なインポートとクラス構造の追加

次に、必要なインポート文とメインクラスの定義を含む、LocalDateGet.javaファイルに基本的な構造を追加します。これらのインポートは、Java で日付と時刻の API を操作するために不可欠です。

  1. WebIDE のコードエディタでLocalDateGet.javaファイルを開きます。

  2. ファイルに以下のコードを追加します。

    import java.time.LocalDate;
    import java.time.temporal.ChronoField;
    import java.time.temporal.TemporalAccessor;
    import java.time.temporal.TemporalField;
    
    public class LocalDateGet {
    
        public static void main(String[] args) {
            // This is where we will call our methods later
        }
    }
    
    • java.time.LocalDate: このクラスは、タイムゾーンのない日付を表します。
    • java.time.temporal.ChronoField: この enum は、DAY_OF_MONTHDAY_OF_WEEKDAY_OF_YEARなど、日付と時刻の標準的なフィールドセットを提供します。
    • java.time.temporal.TemporalAccessor: このインターフェースは、LocalDateなどの時間オブジェクトへの読み取り専用アクセスを提供します。get()メソッドはこのインターフェースで定義されています。
    • java.time.temporal.TemporalField: このインターフェースは、年、月、または月の何日目などの日付と時間のフィールドを表します。ChronoFieldはこのインターフェースを実装しています。
  3. コードを追加した後、LocalDateGet.javaファイルを保存します。

月の日の取得

このステップでは、get()メソッドとChronoField.DAY_OF_MONTHを使用して、LocalDateオブジェクトから月の何日を取得するかをデモンストレーションするメソッドをLocalDateGetクラスに追加します。

  1. WebIDE のコードエディタでLocalDateGet.javaファイルを開きます。

  2. getDayOfMonth()メソッドをLocalDateGetクラス内、mainメソッドの外側に追加します。

    import java.time.LocalDate;
    import java.time.temporal.ChronoField;
    import java.time.temporal.TemporalAccessor;
    import java.time.temporal.TemporalField;
    
    public class LocalDateGet {
    
        public static void getDayOfMonth() {
            // Define the field to retrieve: DAY_OF_MONTH
            TemporalField field = ChronoField.DAY_OF_MONTH;
            // Create a LocalDate object for May 17, 2021
            TemporalAccessor date = LocalDate.of(2021, 5, 17);
    
            // Display the original date
            System.out.println("Date : " + date);
    
            // Retrieve the day of the month using the get() method
            int val = date.get(field);
    
            // Display the retrieved day of the month
            System.out.println("Day of the month: " + val);
            System.out.println(); // Add a blank line for better readability
        }
    
        public static void main(String[] args) {
            // This is where we will call our methods later
        }
    }
    
    • LocalDate.of(2021, 5, 17): 2021 年 5 月 17 日を表すLocalDateオブジェクトを作成します。
    • ChronoField.DAY_OF_MONTH: 月の日付を取得することを指定します。
    • date.get(field): これは操作の核心です。dateオブジェクトでget()メソッドを呼び出し、fieldChronoField.DAY_OF_MONTH)を渡して、対応する整数値を抽出します。
  3. LocalDateGet.javaファイルを保存します。

  4. 次に、このメソッドをmainから呼び出して、実際に動作させてみましょう。mainメソッドを次のように変更します。

    public static void main(String[] args) {
        getDayOfMonth();
        // Other methods will be called here later
    }
    
  5. ファイルをもう一度保存します。

  6. ターミナルを開き、Java コードをコンパイルします。

    javac LocalDateGet.java
    

    エラーがない場合、コンパイルは静かに完了します。

  7. コンパイルされた Java プログラムを実行します。

    java LocalDateGet
    

    次のような出力が表示されるはずです。

    Date : 2021-05-17
    Day of the month: 17
    

    これにより、getDayOfMonth()メソッドが月の何日を正しく抽出していることが確認できます。

曜日の取得

次に、週の曜日を取得する別のメソッドを追加します。ChronoField.DAY_OF_WEEKフィールドは週の曜日を表し、1 が月曜日、2 が火曜日、というように、7 が日曜日です。

  1. WebIDE のコードエディタでLocalDateGet.javaファイルを開きます。

  2. getDayOfWeek()メソッドをLocalDateGetクラス内、getDayOfMonth()メソッドの下に追加します。

    import java.time.LocalDate;
    import java.time.temporal.ChronoField;
    import java.time.temporal.TemporalAccessor;
    import java.time.temporal.TemporalField;
    
    public class LocalDateGet {
    
        // ... (getDayOfMonth method as defined previously) ...
    
        public static void getDayOfWeek() {
            // Define the field to retrieve: DAY_OF_WEEK
            TemporalField field = ChronoField.DAY_OF_WEEK;
            // Create a LocalDate object for May 17, 2021 (which was a Monday)
            TemporalAccessor date = LocalDate.of(2021, 5, 17);
    
            // Display the original date
            System.out.println("Date : " + date);
    
            // Retrieve the day of the week using the get() method
            int val = date.get(field);
    
            // Display the retrieved day of the week
            System.out.println("Day of the week: " + val);
            System.out.println(); // Add a blank line for better readability
        }
    
        public static void main(String[] args) {
            // ... (main method as defined previously) ...
        }
    }
    
  3. LocalDateGet.javaファイルを保存します。

  4. 次に、この新しいメソッドをmainメソッドから呼び出します。mainメソッドを次のように更新します。

    public static void main(String[] args) {
        getDayOfMonth();
        getDayOfWeek(); // Call the new method
        // Other methods will be called here later
    }
    
  5. ファイルをもう一度保存します。

  6. ターミナルから Java コードをコンパイルします。

    javac LocalDateGet.java
    
  7. コンパイルされた Java プログラムを実行します。

    java LocalDateGet
    

    次のような出力が表示されるはずです。

    Date : 2021-05-17
    Day of the month: 17
    
    Date : 2021-05-17
    Day of the week: 1
    

    2021 年 5 月 17 日は月曜日であり、ChronoField.DAY_OF_WEEKは月曜日を 1 として表すため、出力Day of the week: 1は正しいです。

年の日の取得

最後に、年の日を取得するメソッドを追加します。ChronoField.DAY_OF_YEARフィールドは年の日を表し、1 が 1 月 1 日、というようになります。

  1. WebIDE のコードエディタでLocalDateGet.javaファイルを開きます。

  2. getDayOfYear()メソッドをLocalDateGetクラス内、getDayOfWeek()メソッドの下に追加します。

    import java.time.LocalDate;
    import java.time.temporal.ChronoField;
    import java.time.temporal.TemporalAccessor;
    import java.time.temporal.TemporalField;
    
    public class LocalDateGet {
    
        // ... (getDayOfMonth and getDayOfWeek methods as defined previously) ...
    
        public static void getDayOfYear() {
            // Define the field to retrieve: DAY_OF_YEAR
            TemporalField field = ChronoField.DAY_OF_YEAR;
            // Create a LocalDate object for May 17, 2021
            TemporalAccessor date = LocalDate.of(2021, 5, 17);
    
            // Display the original date
            System.out.println("Date : " + date);
    
            // Retrieve the day of the year using the get() method
            int val = date.get(field);
    
            // Display the retrieved day of the year
            System.out.println("Day of the year: " + val);
            System.out.println(); // Add a blank line for better readability
        }
    
        public static void main(String[] args) {
            // ... (main method as defined previously) ...
        }
    }
    
  3. LocalDateGet.javaファイルを保存します。

  4. 次に、この最後のメソッドをmainメソッドから呼び出します。mainメソッドを次のように更新します。

    public static void main(String[] args) {
        getDayOfMonth();
        getDayOfWeek();
        getDayOfYear(); // Call the new method
    }
    
  5. ファイルをもう一度保存します。

  6. ターミナルから Java コードをコンパイルします。

    javac LocalDateGet.java
    
  7. コンパイルされた Java プログラムを実行します。

    java LocalDateGet
    

    年の日を含む完全な出力が表示されるはずです。

    Date : 2021-05-17
    Day of the month: 17
    
    Date : 2021-05-17
    Day of the week: 1
    
    Date : 2021-05-17
    Day of the year: 137
    

    2021 年 5 月 17 日は年の 137 日目であったため、出力Day of the year: 137は正しいです。

まとめ

この実験(Lab)では、Java のLocalDateクラスのget()メソッドを使用して、日付から特定のフィールドを取得する方法を学びました。同じ日付(2021 年 5 月 17 日)の月の日の、週の日の、そして年の日を取得するプログラムを作成しました。get()メソッドをChronoField列挙型(enum)と組み合わせて使用することで、特定の日付コンポーネントを効率的に抽出でき、時間的データ(temporal data)を扱う際に Java プログラムをより正確にすることができます。