Java LocalDate withMonth 方法

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

Java8 中的 LocalDate 类提供了多种方法来操作日期值。其中一个方法是 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 类提供了一个 of() 方法,可以用来创建一个新的 LocalDate 实例。

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("提供的月份值无效: " + ex.getMessage());
        }
    }
}

使用以下命令在终端中编译并运行代码:

javac LocalDateWithMonthMethodExample.java && java LocalDateWithMonthMethodExample

你应该会看到以下输出:

Original Date: 2022-10-12
提供的月份值无效: 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() 方法是一个用于操作日期的有用工具,可以以多种方式使用,包括生成一年中每个月的日期列表。