Java 日期与时间处理完全指南

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

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

开始课程

Java 中处理日期与时间的入门指南

处理日期和时间是开发中最常见的任务之一。无论是事件记录、期限计算、数据过滤还是日历显示——都离不开对时间 API 的熟练掌握。在 Java 中,java.util.Date 和 java.util.Calendar 类曾长期被使用,但它们存在许多缺陷:可变性、非直观的 API、线程安全问题。

从 Java 8 开始,语言中新增了基于 ISO-8601 标准的 java.time 包。它提供了不可变且线程安全的类,使用起来更加方便。在本文中,我们将涵盖新旧两种方法,并展示实际代码示例。



1. 遗留类:Date 和 Calendar

尽管不建议在新项目中使用 Date 和 Calendar,但在遗留代码中仍可能遇到它们。让我们看一下主要要点。



java.util.Date 类

Date 类表示一个特定的时间点,精度为毫秒。它有许多已弃用的方法。

import java.util.Date;

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

// 带毫秒的构造方法(自1970年1月1日起) Date specificDate = new Date(1000000000000L); System.out.println("日期: " + specificDate);

// 比较日期 boolean after = now.after(specificDate); System.out.println("now 是否晚于 specificDate? " + after); }}


java.util.Calendar 类

Calendar 是一个更灵活,但操作日期仍不方便的类。

import java.util.Calendar;

public class CalendarExample { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); // 设置特定日期 cal.set(2025, Calendar.MARCH, 15, 10, 30, 0); System.out.println("设置日期: " + cal.getTime());

// 获取单个字段 int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH) + 1; // 月份从0开始 int day = cal.get(Calendar.DAY_OF_MONTH); System.out.println("年: " + year + ", 月: " + month + ", 日: " + day);

// 添加天数 cal.add(Calendar.DAY_OF_MONTH, 10); System.out.println("10天后: " + cal.getTime()); }}

缺点: 可变性(方法会修改对象本身)、处理时区复杂、月份索引易混淆。



2. 现代 API:java.time(Java 8+)

java.time 包解决了旧类的所有问题。主要类:

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


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 specific = LocalDate.of(2025, Month.DECEMBER, 25); System.out.println("圣诞节: " + specific);

// 添加天数 LocalDate nextWeek = to

博客

书籍推荐