Java 日期处理:库与工具
日期和时间处理是任何应用程序中的关键任务之一。在 Java 中,标准类 java.util.Date 和 java.util.Calendar 长期以来因不便、可变性以及时区支持不佳而备受批评。然而,随着 Java 8 的发布,情况发生了根本性变化。在本文中,我们将介绍 Java 中用于日期处理的主要库和工具,它们将帮助您编写简洁可靠的代码。
1. 标准库 java.time (Java 8+)
从 Java 8 开始,开发人员可以使用基于 ISO-8601 标准的强大包 java.time。这是处理日期和时间的推荐方式。主要类包括:
LocalDate— 不含时间的日期(年、月、日)。LocalTime— 不含日期的时间(时、分、秒、纳秒)。LocalDateTime— 日期和时间的组合。ZonedDateTime— 带时区的日期和时间。Instant— UTC 时间戳(用于机器时间)。Duration和Period— 用于处理时间间隔。
示例:创建和格式化日期
import java.time.LocalDate;import java.time.format.DateTimeFormatter;
public class DateExample { public static void main(String[] args) { // 当前日期 LocalDate today = LocalDate.now(); System.out.println("今天: " + today);
// 创建特定日期 LocalDate birthDate = LocalDate.of(1990, 5, 15); System.out.println("出生日期: " + birthDate);
// 格式化 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); String formatted = birthDate.format(formatter); System.out.println("格式化后的日期: " + formatted);
// 解析字符串 String dateStr = "2023-12-31"; LocalDate parsedDate = LocalDate.parse(dateStr); System.out.println("解析结果: " + parsedDate); }}示例:计算日期差
import java.time.LocalDate;import java.time.Period;import java.time.temporal.ChronoUnit;
public class DateDifference { public static void main(String[] args) { LocalDate start = LocalDate.of(2020, 1, 1); LocalDate end = LocalDate.of(2024, 3, 15);
Period period = Period.between(start, end); System.out.println("相差: " + period.getYears() + " 年, " + period.getMonths() + " 月, " + period.getDays() + " 天");
long daysBetween = ChronoUnit.DAYS.between(start, end); System.out.println("总天数: " + daysBetween); }}2. Joda-Time (适用于旧版 Java)
在 java.time 出现之前,Joda-Time 库是事实上的标准。它提供了方便的不可变类以及时区支持。如果您使用的是 Java 7 或更低版本,Joda-Time 是一个绝佳的选择。
依赖配置 (Maven):
<dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.12.7</version></dependency>示例:使用 Joda-Time
import org.joda.time.DateTime;import org.joda.time.Days;import org.joda.time.format.DateTimeFormat;import org.joda.time.format.DateTimeFormatter;
public class JodaExample { public static void main(String[] args) { // 当前日期和时间 DateTime now = new DateTime(); System.out.println("现在: " + now);
// 创建日期 DateTime specificDate =