Java日期处理:java.time、Joda-Time和Apache Commons库概述

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java 中的日期处理:现代库与工具概览



日期和时间处理是 Java 开发中最常见的任务之一。长期以来,标准类 java.util.Date 和 java.util.Calendar 使用不便、可变(mutable)且容易出错。幸运的是,情况已经改变。在本概览中,我们将介绍三种主要方法:内置包 java.time、Joda-Time 库和 Apache Commons Lang 工具。



1. java.time (Java 8+) — 现代标准



从 Java 8 开始,标准库中引入了基于 Joda-Time 理念的 java.time 包。这是新项目中处理日期的主要且推荐的方式。



关键类:

  • LocalDate — 不带时间的日期(年、月、日)。
  • LocalTime — 不带日期的时间(时、分、秒、纳秒)。
  • LocalDateTime — 日期和时间的组合。
  • ZonedDateTime — 带时区的日期和时间。
  • Instant — UTC 时间点(机器可读)。
  • Duration 和 Period — 用于处理时间间隔。


使用示例:

import java.time.*;import java.time.format.DateTimeFormatter;import java.time.temporal.ChronoUnit;

public class JavaTimeExample { public static void main(String[] args) { // 当前日期和时间 LocalDate today = LocalDate.now(); LocalTime now = LocalTime.now(); System.out.println("今天: " + today); System.out.println("现在: " + now);

// 创建特定日期 LocalDate birthDate = LocalDate.of(1990, Month.MAY, 15); System.out.println("出生日期: " + birthDate);

// 处理时区 ZonedDateTime berlinTime = ZonedDateTime.now(ZoneId.of("Europe/Berlin")); ZonedDateTime tokyoTime = ZonedDateTime.now(ZoneId.of("Asia/Tokyo")); System.out.println("柏林时间: " + berlinTime); System.out.println("东京时间: " + tokyoTime);

// 日期之间的差值 long daysBetween = ChronoUnit.DAYS.between(birthDate, today); System.out.println("距离出生日期的天数: " + daysBetween);

// 格式化 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm"); String formatted = LocalDateTime.now().format(formatter); System.out.println("格式化后: " + formatted);

// 解析字符串 LocalDate parsedDate = LocalDate.parse("2023-12-31"); System.out.println("解析后: " + parsedDate); }}


2. Joda-Time — 久经考验的替代方案



在 Java 8 发布之前,Joda-Time 是处理日期的事实标准。现在,只有在遗留项目或需要支持旧版 Java(低于 8)时,才使用它。



主要特点:

  • 不可变(immutable)对象 — 线程安全。
  • 支持多种日历系统(伊斯兰历、佛教历等)。
  • 简单直观的 API。


Joda-Time 代码示例:

import org.joda.time.*;import org.joda.time.format.DateTimeFormat;import org.joda.time.format.DateTimeFormatter;

public class JodaTimeExample { public static void main(String[] args) { // 当前日期和时间 DateTime now = DateTime.now(); System.out.println("现在: " + now);

// 创建日期 DateTime specificDate = new DateTime(2020, 6, 15, 10, 30, 0); System.out.println("特定日期: " + specificDate);

// 添加天数 DateTime nextW

推荐