Java LocalDate 获取当前日期和计算未来日期

JavaBeginner
立即练习

介绍

本教程将指导你使用 Java 中的 LocalDate 类检索当前日期并计算下一个日期。Java Time API,在 Java 8 中引入,提供了全面的日期和时间处理能力。通过本教程,你将了解如何使用 LocalDate 高效地执行基本的日期操作。

理解 Java Time API 和 LocalDate

在开始编写代码之前,让我们先了解一下 LocalDate 类,以及它为什么对在 Java 应用程序中处理日期很有用。

什么是 Java Time API?

Java 8 在 java.time 包中引入了 Java Time API,以解决旧的日期和时间类的局限性。这个 API 提供了一种更清晰、更直观的日期和时间处理方法。

LocalDate 简介

LocalDate 类表示没有时间组件的日期(年、月、日)。它是不可变的、线程安全的,并遵循 ISO-8601 日历系统。

使用 LocalDate 的一些主要优点包括:

  • 它在日期、时间和日期时间概念之间提供了清晰的分离
  • 它提供了用于日期操作的直观方法
  • 它内置了对不同日期格式的支持
  • 它正确处理日期计算

让我们创建一个新的 Java 文件来探索 LocalDate 的功能。

  1. 在 WebIDE 中,单击 Explorer 面板(左侧边栏上看起来像页面的图标)
  2. 在文件资源管理器面板中右键单击,然后选择“New File”(新建文件)
  3. 将文件命名为 DateExample.java,然后单击“OK”(确定)
  4. 将以下基本代码模板复制到文件中:
public class DateExample {
    public static void main(String[] args) {
        // 我们将在这里添加我们的日期代码
        System.out.println("Learning about LocalDate in Java");
    }
}
  1. 按 Ctrl+S 或从菜单中选择 File > Save(文件 > 保存)来保存文件

现在我们已经创建了 Java 文件,我们将在下一步中继续添加代码来处理当前日期。

使用 LocalDate 检索当前日期

在这一步中,我们将修改 Java 程序,以使用 LocalDate 类检索和显示当前日期。

导入 LocalDate 类

首先,我们需要从 java.time 包中导入 LocalDate 类。打开 DateExample.java 文件,并在顶部添加导入语句:

import java.time.LocalDate;

public class DateExample {
    public static void main(String[] args) {
        // 我们将在这里添加我们的日期代码
        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) {
        // 获取当前日期
        LocalDate currentDate = LocalDate.now();

        // 显示当前日期
        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) {
        // 获取当前日期
        LocalDate currentDate = LocalDate.now();

        // 通过添加一天来计算下一个日期
        LocalDate nextDate = currentDate.plusDays(1);

        // 显示这两个日期
        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) {
        // 获取当前日期
        LocalDate currentDate = LocalDate.now();

        // 计算各种未来日期
        LocalDate nextDate = currentDate.plusDays(1);
        LocalDate nextWeek = currentDate.plusWeeks(1);
        LocalDate nextMonth = currentDate.plusMonths(1);
        LocalDate nextYear = currentDate.plusYears(1);

        // 显示所有日期
        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

输出将显示当前日期、下一个日期以及一周、一个月和一年后的日期:

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():将月份作为枚举常量返回
  • getYear():返回年份
  • getDayOfWeek():将星期几作为枚举常量返回

让我们创建一个新文件来探索这些方法:

  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) {
        // 获取当前日期
        LocalDate currentDate = LocalDate.now();

        // 提取日期组件
        int day = currentDate.getDayOfMonth();
        int monthValue = currentDate.getMonthValue();
        Month month = currentDate.getMonth();
        int year = currentDate.getYear();
        DayOfWeek dayOfWeek = currentDate.getDayOfWeek();

        // 显示组件
        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) {
        // 获取当前日期
        LocalDate currentDate = LocalDate.now();

        // 创建一个特定日期
        LocalDate specificDate = LocalDate.of(2025, 12, 25);

        // 从当前日期提取日期组件
        int day = currentDate.getDayOfMonth();
        int monthValue = currentDate.getMonthValue();
        Month month = currentDate.getMonth();
        int year = currentDate.getYear();
        DayOfWeek dayOfWeek = currentDate.getDayOfWeek();

        // 显示当前日期组件
        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);

        // 显示特定日期
        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 中更高级的功能,例如处理时区、为不同区域格式化日期以及执行复杂的日期计算。