这是什么以及为什么需要它?
在Java编程中,处理日期和时间是最常见的任务之一。标准库java.time(自Java 8引入)提供了一个强大且直观的API,用于处理日期、时间、时区和时间段。在Java 8之前,开发者经常使用第三方库Joda-Time,它成为了java.time的原型。这两个库都解决了旧的java.util.Date和java.util.Calendar的问题:线程安全、对象不可变性以及便捷的格式化方法。
如何安装?
java.time内置于Java 8及更高版本中——无需安装。对于Joda-Time,请在Maven中添加依赖:
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.12.5</version>
</dependency>对于Gradle:implementation 'joda-time:joda-time:2.12.5'。
主要功能
- LocalDate, LocalTime, LocalDateTime — 处理不带时区的日期/时间。
- ZonedDateTime, OffsetDateTime — 考虑时区。
- Period, Duration — 日期和时间之间的差值。
- DateTimeFormatter — 灵活的格式化和解析。
- Instant — UTC时间点。
Java代码示例
import java.time.*;
import java.time.format.DateTimeFormatter;
public class DateExample {
public static void main(String[] args) {
// 当前日期
LocalDate today = LocalDate.now();
System.out.println("今天: " + today);
// 创建特定日期
LocalDate specificDate = LocalDate.of(2025, Month.MARCH, 15);
System.out.println("特定日期: " + specificDate);
// 日期之间的差值
Period period = Period.between(specificDate, today);
System.out.println("差值: " + period.getYears() + " 年, " + period.getMonths() + " 月, " + period.getDays() + " 天");
// 格式化
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
String formatted = today.format(formatter);
System.out.println("格式化后: " + formatted);
// 解析字符串
LocalDate parsed = LocalDate.parse("01.01.2024", formatter);
System.out.println("解析后: " + parsed);
// 处理时间和时区
ZonedDateTime zoned = ZonedDateTime.now(ZoneId.of("Europe/Moscow"));
System.out.println("莫斯科时间: " + zoned);
}
}何时使用
java.time是所有基于Java 8及更高版本的新项目的主要选择。使用它来处理:年龄计算、截止日期、带时间戳的日志、任务调度器、日历和时区操作。Joda-Time适用于维护旧项目,或者当需要额外功能时,例如Interval或MutableDateTime。与过时的Calendar相比,这两个库都显著简化了代码。