Java の LocalDate で現在の日付と次の日付を取得する方法

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

はじめに

このチュートリアルでは、Java の LocalDate クラスを使用して現在の日付を取得し、次の日付を計算する方法を説明します。Java 8 で導入された Java Time API は、包括的な日付と時刻の処理機能を提供します。このチュートリアルを終える頃には、LocalDate を使用して基本的な日付操作を効率的に実行する方法を理解できるようになります。

Java Time API と LocalDate の理解

コーディングを始める前に、LocalDate クラスについて、そして Java アプリケーションで日付を扱う際にそれがなぜ役立つのかを学びましょう。

Java Time API とは?

Java 8 では、古い日付と時刻のクラスの制限に対処するために、java.time パッケージに Java Time API が導入されました。この API は、日付と時刻の処理に対するより明確で直感的なアプローチを提供します。

LocalDate の紹介

LocalDate クラスは、時刻コンポーネント(年、月、日)を持たない日付を表します。これは不変であり、スレッドセーフであり、ISO-8601 カレンダーシステムに従います。

LocalDate を使用する主な利点には、以下が含まれます。

  • 日付、時刻、および日時の概念を明確に分離します
  • 日付操作のための直感的なメソッドを提供します
  • さまざまな日付形式の組み込みサポートがあります
  • 日付計算を正しく処理します

LocalDate の機能を探索するために、新しい Java ファイルを作成しましょう。

  1. WebIDE で、エクスプローラーパネル(左側のサイドバーにあるページのようなアイコン)をクリックします
  2. ファイルエクスプローラーパネルを右クリックし、「New File」を選択します
  3. ファイル名を DateExample.java とし、「OK」をクリックします
  4. 次の基本的なコードテンプレートをファイルにコピーします。
public class DateExample {
    public static void main(String[] args) {
        // We will add our date code here
        System.out.println("Learning about LocalDate in Java");
    }
}
  1. Ctrl+S を押すか、メニューから File > Save を選択してファイルを保存します

Java ファイルを作成したので、次のステップで現在の日付を操作するコードを追加します。

LocalDate を使用して現在の日付を取得する

このステップでは、LocalDate クラスを使用して現在の日付を取得し、表示するように Java プログラムを変更します。

LocalDate クラスのインポート

まず、java.time パッケージから LocalDate クラスをインポートする必要があります。 DateExample.java ファイルを開き、先頭にインポート文を追加します。

import java.time.LocalDate;

public class DateExample {
    public static void main(String[] args) {
        // We will add our date code here
        System.out.println("Learning about LocalDate in Java");
    }
}

LocalDate.now() メソッドの使用

LocalDate クラスは、現在の日付を返す now() という静的メソッドを提供します。現在の日付を取得して表示するようにコードを変更しましょう。

import java.time.LocalDate;

public class DateExample {
    public static void main(String[] args) {
        // Get the current date
        LocalDate currentDate = LocalDate.now();

        // Display the current date
        System.out.println("Current date: " + currentDate);
    }
}

プログラムのコンパイルと実行

次に、プログラムをコンパイルして実行しましょう。

  1. WebIDE でターミナルを開きます(メニューから Terminal > New Terminal)
  2. 必要に応じて、プロジェクトディレクトリに移動します。
    cd /home/labex/project
  3. Java プログラムをコンパイルします。
    javac DateExample.java
  4. コンパイルされたプログラムを実行します。
    java DateExample

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

Current date: 2023-04-12

実際の日付は、プログラムを実行した現在の日付を反映します。

出力形式の理解

LocalDate オブジェクトのデフォルトの文字列表現は、ISO-8601 形式 YYYY-MM-DD に従います。これは、日付を表すための国際標準です。

たとえば、2023-04-12 は 2023 年 4 月 12 日を表します。

LocalDate クラスを使用して、現在の日付を取得して表示することに成功しました。次のステップでは、次の日付を計算する方法を学びます。

次の日付の計算

現在の日付を取得できるようになったので、LocalDate オブジェクトに日数を加算して、次の日付を計算する方法を学びます。

LocalDate による日付操作の理解

LocalDate クラスは、以下を含む、日付操作のためのいくつかのメソッドを提供します。

  • plusDays(long days): 指定された日数を加算します
  • plusWeeks(long weeks): 指定された週数を加算します
  • plusMonths(long months): 指定された月数を加算します
  • plusYears(long years): 指定された年数を加算します

減算用の対応する minus メソッドもあります。

次の日付を計算して表示するようにコードを強化しましょう。

import java.time.LocalDate;

public class DateExample {
    public static void main(String[] args) {
        // Get the current date
        LocalDate currentDate = LocalDate.now();

        // Calculate the next date by adding one day
        LocalDate nextDate = currentDate.plusDays(1);

        // Display both dates
        System.out.println("Current date: " + currentDate);
        System.out.println("Next date: " + nextDate);
    }
}

更新されたプログラムのコンパイルと実行

更新されたプログラムをコンパイルして実行しましょう。

  1. DateExample.java への変更を保存したことを確認してください
  2. ターミナルで、Java プログラムをコンパイルします。
    javac DateExample.java
  3. コンパイルされたプログラムを実行します。
    java DateExample

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

Current date: 2023-04-12
Next date: 2023-04-13

ここでも、実際の日付は、プログラムを実行した現在の日付を反映します。

その他の日付操作の探索

他の日付操作メソッドを実演するために、プログラムをさらに強化しましょう。

import java.time.LocalDate;

public class DateExample {
    public static void main(String[] args) {
        // Get the current date
        LocalDate currentDate = LocalDate.now();

        // Calculate various future dates
        LocalDate nextDate = currentDate.plusDays(1);
        LocalDate nextWeek = currentDate.plusWeeks(1);
        LocalDate nextMonth = currentDate.plusMonths(1);
        LocalDate nextYear = currentDate.plusYears(1);

        // Display all dates
        System.out.println("Current date: " + currentDate);
        System.out.println("Next date: " + nextDate);
        System.out.println("Date after one week: " + nextWeek);
        System.out.println("Date after one month: " + nextMonth);
        System.out.println("Date after one year: " + nextYear);
    }
}

プログラムをもう一度コンパイルして実行します。

javac DateExample.java
java DateExample

出力には、現在の日付、次の日付、および 1 週間後、1 か月後、1 年後の日付が表示されます。

Current date: 2023-04-12
Next date: 2023-04-13
Date after one week: 2023-04-19
Date after one month: 2023-05-12
Date after one year: 2024-04-12

重要な概念:不変性

plusDays() の結果を新しい変数に代入したことに注意してください。これは、LocalDate オブジェクトが不変であるためです。つまり、作成後にその値を変更することはできません。 plusDays() のようなメソッドは、元のオブジェクトを変更しません。代わりに、更新された値を持つ新しいオブジェクトを返します。

この不変性は、LocalDate オブジェクトをスレッドセーフにし、複雑なアプリケーションでより予測可能にする重要な機能です。

日付コンポーネントの抽出

このステップでは、LocalDate オブジェクトから、日、月、年、曜日などの個々のコンポーネントを抽出する方法を学びます。

日付コンポーネント抽出メソッド

LocalDate クラスは、日付の特定のコンポーネントを抽出するためのいくつかのメソッドを提供します。

  • getDayOfMonth(): 月の日(1~31)を返します
  • getMonthValue(): 月を数値(1~12)として返します
  • getMonth(): 月を enum 定数として返します
  • getYear(): 年を返します
  • getDayOfWeek(): 曜日を enum 定数として返します

これらのメソッドを探索するために、新しいファイルを作成しましょう。

  1. WebIDE で、DateComponents.java という名前の新しいファイルを作成します
  2. ファイルに次のコードを追加します。
import java.time.LocalDate;
import java.time.Month;
import java.time.DayOfWeek;

public class DateComponents {
    public static void main(String[] args) {
        // Get the current date
        LocalDate currentDate = LocalDate.now();

        // Extract date components
        int day = currentDate.getDayOfMonth();
        int monthValue = currentDate.getMonthValue();
        Month month = currentDate.getMonth();
        int year = currentDate.getYear();
        DayOfWeek dayOfWeek = currentDate.getDayOfWeek();

        // Display the components
        System.out.println("Current date: " + currentDate);
        System.out.println("Day of month: " + day);
        System.out.println("Month (number): " + monthValue);
        System.out.println("Month (name): " + month);
        System.out.println("Year: " + year);
        System.out.println("Day of week: " + dayOfWeek);
    }
}
  1. Ctrl+S を押してファイルを保存します

プログラムのコンパイルと実行

次に、新しいプログラムをコンパイルして実行しましょう。

  1. ターミナルで、Java プログラムをコンパイルします。
    javac DateComponents.java
  2. コンパイルされたプログラムを実行します。
    java DateComponents

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

Current date: 2023-04-12
Day of month: 12
Month (number): 4
Month (name): APRIL
Year: 2023
Day of week: WEDNESDAY

特定の日付の作成

現在の日付を取得することに加えて、of() メソッドを使用して、特定の日付を表す LocalDate オブジェクトを作成できます。特定の日付を作成するようにプログラムを強化しましょう。

import java.time.LocalDate;
import java.time.Month;
import java.time.DayOfWeek;

public class DateComponents {
    public static void main(String[] args) {
        // Get the current date
        LocalDate currentDate = LocalDate.now();

        // Create a specific date
        LocalDate specificDate = LocalDate.of(2025, 12, 25);

        // Extract date components from the current date
        int day = currentDate.getDayOfMonth();
        int monthValue = currentDate.getMonthValue();
        Month month = currentDate.getMonth();
        int year = currentDate.getYear();
        DayOfWeek dayOfWeek = currentDate.getDayOfWeek();

        // Display the current date components
        System.out.println("Current date: " + currentDate);
        System.out.println("Day of month: " + day);
        System.out.println("Month (number): " + monthValue);
        System.out.println("Month (name): " + month);
        System.out.println("Year: " + year);
        System.out.println("Day of week: " + dayOfWeek);

        // Display the specific date
        System.out.println("\nSpecific date: " + specificDate);
        System.out.println("Day of week for specific date: " + specificDate.getDayOfWeek());
    }
}

更新されたプログラムをコンパイルして実行します。

javac DateComponents.java
java DateComponents

出力には、特定の日付に関する情報が含まれるようになります。

Current date: 2023-04-12
Day of month: 12
Month (number): 4
Month (name): APRIL
Year: 2023
Day of week: WEDNESDAY

Specific date: 2025-12-25
Day of week for specific date: THURSDAY

これで、LocalDate オブジェクトからコンポーネントを抽出し、特定の日付を作成する方法を学びました。これらの機能は、日付ベースの操作を実行したり、さまざまな形式で日付情報を表示したりする必要があるアプリケーションを構築する際に特に役立ちます。

まとめ

このチュートリアルでは、Java Time API の LocalDate クラスを使用して、Java で日付を操作する方法を学びました。ここでは、達成した内容の概要を示します。

  1. LocalDate.now() を使用して現在の日付を取得する Java プログラムを作成しました
  2. 日付に日、週、月、年を追加して、将来の日付を計算しました
  3. 日、月、年、曜日など、日付からコンポーネントを抽出しました
  4. LocalDate.of() メソッドを使用して特定の日付を作成しました

これらの基本的な日付操作は、Java アプリケーションにおけるより複雑な日付ベースの機能の基盤となります。Java Time API は、日付と時刻を操作するための包括的なクラスとメソッドのセットを提供し、アプリケーションで日付関連の要件を簡単に処理できるようにします。

習得した知識の一般的な応用例には、以下が含まれます。

  • タスクや支払いの期日の計算
  • イベントと予定のスケジュール
  • 特定の日付の曜日の決定
  • イベント間の期間の追跡
  • ユーザーインターフェースでの表示用の日付のフォーマット

Java の学習を続ける中で、タイムゾーンの操作、さまざまな地域の日付のフォーマット、複雑な日付計算の実行など、Java Time API のより高度な機能を探索できます。