Java の LocalDate の withMonth メソッド

JavaJavaBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Java8のLocalDateクラスは、日付値を操作するための複数のメソッドを提供します。そのようなメソッドの1つがwithMonth()で、年の月を変更または設定した後の新しいLocalDateインスタンスを返します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/BasicSyntaxGroup -.-> java/for_loop("For Loop") java/BasicSyntaxGroup -.-> java/output("Output") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/packages_api("Packages / API") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/date("Date") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("Exceptions") java/SystemandDataProcessingGroup -.-> java/object_methods("Object Methods") subgraph Lab Skills java/for_loop -.-> lab-117862{{"Java の LocalDate の withMonth メソッド"}} java/output -.-> lab-117862{{"Java の LocalDate の withMonth メソッド"}} java/classes_objects -.-> lab-117862{{"Java の LocalDate の withMonth メソッド"}} java/packages_api -.-> lab-117862{{"Java の LocalDate の withMonth メソッド"}} java/date -.-> lab-117862{{"Java の LocalDate の withMonth メソッド"}} java/exceptions -.-> lab-117862{{"Java の LocalDate の withMonth メソッド"}} java/object_methods -.-> lab-117862{{"Java の LocalDate の withMonth メソッド"}} end

LocalDateインスタンスの作成

最初のステップは、JavaでLocalDateインスタンスを作成することです。LocalDateクラスはjava.timeパッケージにあるため、コードファイルの先頭にそのパッケージを含めます。LocalDateクラスは、新しいLocalDateインスタンスを作成できるof()メソッドを提供します。

import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // 新しいLocalDateインスタンスを作成
        LocalDate date = LocalDate.of(2022, 10, 12);

        // 元の日付を表示
        System.out.println("Original Date: " + date);
    }
}

次のコマンドを使用して、ターミナルでコードをコンパイルして実行します。

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

withMonth()メソッドの使用

withMonth()メソッドは、年の月を引数として提供された値に設定した新しいLocalDateインスタンスを返します。

withMonth()メソッドを使用して、異なる年の月を設定し、新しく作成された日付を取得することができます。ここでは、年の月を4に設定して新しい日付を取得しています。

// 年の月を4に設定して新しい日付を取得
LocalDate newDate = date.withMonth(4);

// 新しい日付を表示
System.out.println("New Date: " + newDate);

以下が完全なコードです。

import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // 新しいLocalDateインスタンスを作成
        LocalDate date = LocalDate.of(2022, 10, 12);

        // 元の日付を表示
        System.out.println("Original Date: " + date);

        // 年の月を4に設定して新しい日付を取得
        LocalDate newDate = date.withMonth(4);

        // 新しい日付を表示
        System.out.println("New Date: " + newDate);
    }
}

次のコマンドを使用して、ターミナルでコードをコンパイルして実行します。

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

以下の出力が表示されるはずです。

Original Date: 2022-10-12
New Date: 2022-04-12

無効な月の値の処理

withMonth()メソッドに渡される月の値が無効である場合、すなわち範囲[1, 12]外の場合、DateTimeExceptionがスローされます。

以下は、無効な月の値を処理する方法を示す例です。

import java.time.DateTimeException;
import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // 新しいLocalDateインスタンスを作成
        LocalDate date = LocalDate.of(2022, 10, 12);

        // 元の日付を表示
        System.out.println("Original Date: " + date);

        try {
            // 無効な月の値(13)を設定しようとする
            LocalDate newDate = date.withMonth(13);

            // 新しい日付を表示
            System.out.println("New Date: " + newDate);
        } catch(DateTimeException ex) {
            System.out.println("Invalid month value provided: " + ex.getMessage());
        }
    }
}

次のコマンドを使用して、ターミナルでコードをコンパイルして実行します。

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

以下の出力が表示されるはずです。

Original Date: 2022-10-12
Invalid month value provided: Invalid value for MonthOfYear (valid values 1 - 12): 13

元の日付インスタンスの年の月を変更する

withMonth()メソッドは、年の月の値が新しい値に設定された新しいLocalDateインスタンスを返し、元の日付インスタンスは変更されません。元の日付の年の月の値を変更したい場合は、withMonth()が返す値を元の日付インスタンスに再割り当てする必要があります。例えば、以下のようになります。

// 元の日付インスタンスの年の月を変更する
date = date.withMonth(11);

// 更新された日付を表示
System.out.println("Updated Date: " + date);

以下が完全なコードです。

import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // 新しいLocalDateインスタンスを作成
        LocalDate date = LocalDate.of(2022, 10, 12);

        // 元の日付を表示
        System.out.println("Original Date: " + date);

        // 年の月を5に設定して新しい日付を取得する
        LocalDate newDate = date.withMonth(5);

        // 新しい日付を表示
        System.out.println("New Date: " + newDate);

        // 元の日付インスタンスの年の月を変更する
        date = date.withMonth(11);

        // 更新された日付を表示
        System.out.println("Updated Date: " + date);
    }
}

次のコマンドを使用して、ターミナルでコードをコンパイルして実行します。

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

以下の出力が表示されるはずです。

Original Date: 2022-10-12
New Date: 2022-05-12
Updated Date: 2022-11-12

無効な日付の値の処理

月を変更する際に、その年において日付が無効な場合、その日付は新しい月の最終的な有効な日付に変更されます。例えば、うるう年において年の月を2月から4月に変更する場合、日付の値は自動的に4月の最終的な有効な日付に調整されます。

// 新しいLocalDateインスタンスを作成
LocalDate date = LocalDate.of(2024, 2, 29);

// 元の日付を表示
System.out.println("Original Date: " + date);

// 年の月を4月に設定
LocalDate newDate = date.withMonth(4);

// 新しい日付を表示
System.out.println("New Date: " + newDate);

以下が完全なコードです。

import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // 新しいLocalDateインスタンスを作成
        LocalDate date = LocalDate.of(2024, 2, 29);

        // 元の日付を表示
        System.out.println("Original Date: " + date);

        // 年の月を4月に設定
        LocalDate newDate = date.withMonth(4);

        // 新しい日付を表示
        System.out.println("New Date: " + newDate);
    }
}

次のコマンドを使用して、ターミナルでコードをコンパイルして実行します。

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

以下の出力が表示されるはずです。

Original Date: 2024-02-29
New Date: 2024-04-30

ループでwithMonth()メソッドを使用する

年の月の値が異なる日付のリストを生成するために、ループでwithMonth()メソッドを使用することができます。以下は、2022年の各月に対応する日付を生成する例です。

// 2022年の各月に対応する日付を生成する
for (int month = 1; month <= 12; month++) {
    LocalDate date = LocalDate.of(2022, month, 1);
    System.out.println("Date for " + date.getMonth() + ": " + date);
}

以下が完全なコードです。

import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // 2022年の各月に対応する日付を生成する
        for (int month = 1; month <= 12; month++) {
            LocalDate date = LocalDate.of(2022, month, 1);
            System.out.println("Date for " + date.getMonth() + ": " + date);
        }
    }
}

次のコマンドを使用して、ターミナルでコードをコンパイルして実行します。

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

以下の出力が表示されるはずです。

Date for JANUARY: 2022-01-01
Date for FEBRUARY: 2022-02-01
Date for MARCH: 2022-03-01
Date for APRIL: 2022-04-01
Date for MAY: 2022-05-01
Date for JUNE: 2022-06-01
Date for JULY: 2022-07-01
Date for AUGUST: 2022-08-01
Date for SEPTEMBER: 2022-09-01
Date for OCTOBER: 2022-10-01
Date for NOVEMBER: 2022-11-01
Date for DECEMBER: 2022-12-01

getMonthValue()メソッドの使用

getMonthValue()メソッドは、日付の年の月の値を取得するために使用されます。以下は、withMonth()getMonthValue()メソッドを使用して日付の年の月の値を変更し、取得する方法を示す例です。

// 新しいLocalDateインスタンスを作成
LocalDate date = LocalDate.of(2022, 11, 15);

// 元の日付を表示
System.out.println("Original Date: " + date);

// 年の月の値を取得
int originalMonthValue = date.getMonthValue();

// 年の月を10に変更
date = date.withMonth(10);

// 新しい年の月の値を取得
int newMonthValue = date.getMonthValue();

// 更新された日付と月の値を表示
System.out.println("Updated Date: " + date);
System.out.println("Original Month Value: " + originalMonthValue);
System.out.println("New Month Value: " + newMonthValue);

以下が完全なコードです。

import java.time.LocalDate;

public class LocalDateWithMonthMethodExample {
    public static void main(String[] args) {
        // 新しいLocalDateインスタンスを作成
        LocalDate date = LocalDate.of(2022, 11, 15);

        // 元の日付を表示
System.out.println("Original Date: " + date);

        // 年の月の値を取得
int originalMonthValue = date.getMonthValue();

        // 年の月を10に変更
date = date.withMonth(10);

        // 新しい年の月の値を取得
int newMonthValue = date.getMonthValue();

        // 更新された日付と月の値を表示
System.out.println("Updated Date: " + date);
System.out.println("Original Month Value: " + originalMonthValue);
System.out.println("New Month Value: " + newMonthValue);
    }
}

次のコマンドを使用して、ターミナルでコードをコンパイルして実行します。

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

以下の出力が表示されるはずです。

Original Date: 2022-11-15
Updated Date: 2022-10-15
Original Month Value: 11
New Month Value: 10

まとめ

この実験では、withMonth()メソッドを使用して、年の月が新しい値に設定されたLocalDateインスタンスのコピーを作成する方法を学びました。また、無効な月の値を処理する方法と、getMonthValue()メソッドを使用してLocalDateインスタンスの年の月の値を取得する方法も学びました。withMonth()メソッドは日付を操作するための便利なツールであり、年の各月に対応する日付のリストを生成するなど、多くの異なる方法で使用できます。