Java 日期和时间处理:从入门到精通

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

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

开始课程

Java 日期和时间处理入门



日期和时间处理是任何应用程序开发中的关键任务之一。无论是事件日志记录、交货期限计算、日程安排还是数据分析——不理解 Java 如何管理时间对象都是不行的。在本文中,我们将介绍所有主要方面:从旧的 API(Date 和 Calendar)到现代的 java.time 包(Java 8+)。您将学习如何创建、格式化、比较和计算日期之间的差异。



1. 旧 API:Date 和 Calendar



在 Java 8 之前,用于处理日期的主要类是 java.util.Date 和 java.util.Calendar。它们在遗留代码中仍然很常见,因此了解它们的基本功能和局限性非常重要。



1.1 Date 类

Date 表示一个精确到毫秒的特定时间点。然而,它有很多缺点:它是可变的(在多线程应用程序中不安全),并且对国际化的支持很差。



import java.util.Date;

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

// 获取年份的过时方法 (1900 + ...) int year = now.getYear() + 1900; System.out.println("年份: " + year); }}


1.2 Calendar 类

Calendar 是一个更灵活但更繁琐的类。它允许操作日期的各个组成部分(年、月、日)。



import java.util.Calendar;

public class CalendarExample { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); System.out.println("当前时间: " + cal.getTime());

// 设置特定日期 cal.set(2025, Calendar.MARCH, 15); System.out.println("设置的日期: " + cal.getTime());

// 增加 7 天 cal.add(Calendar.DAY_OF_MONTH, 7); System.out.println("一周后: " + cal.getTime()); }}


缺点:月份从 0 开始编号(一月 = 0),可变性,缺乏简单的格式化。



2. 新 API:java.time (Java 8+)



从 Java 8 开始,标准库中添加了 java.time 包,它基于 Joda-Time 库的思想。它由不可变(immutable)类组成,使代码安全且可预测。



2.1 LocalDate — 仅日期

LocalDate 表示没有时间的日期(年、月、日)。非常适合生日、日历等场景。



import java.time.LocalDate;import java.time.Month;

public class LocalDateExample { public static void main(String[] args) { // 当前日期 LocalDate today = LocalDate.now(); System.out.println("今天: " + today);

// 特定日期 LocalDate specificDate = LocalDate.of(2025, Month.DECEMBER, 31); System.out.println("新年: " + specificDate);

// 增加/减少天数 LocalDate nextWeek = today.plusDays(7); System.out.println("一周后: " + nextWeek); }}


2.2 LocalTime — 仅时间

LocalTime 存储时间(小时、分钟、秒、纳秒),不关联日期。



import java.time.LocalTime;

public class LocalTimeExample { public static void main(String[] args) { LocalTime now = LocalTime.now(); System.out.println("当前时间: " + now);

LocalTime meeting = LocalTime.of(14, 30); System.out.println("会议时间: " + meeting);

// 比较时间 if (now.isAfter(meeting)) { System.out.println("会议已经结束"); } }}<

博客

书籍推荐