Java 时间处理神器:java.time API 实战详解

✍️ 作者:默语 | 微信:Solitudemind
📬 公众号:默语摸鱼


在这里插入图片描述

✅ 内容摘要

本文详细介绍了 Java 8 引入的现代时间 API —— java.time,包括常见的 LocalDateLocalDateTimeDateTimeFormatter 的使用方式。通过实战代码演示如何优雅处理日期、时间和格式转换场景,助力开发者写出更安全、可读性更强的时间逻辑。


📌 为什么推荐使用 java.time

在 Java 8 之前,我们普遍使用的是 DateCalendar 类,它们存在以下几个问题:

  • 非线程安全
  • 操作繁琐且不直观
  • 可读性差

Java 8 的 java.time 包从根本上解决了这些问题,提供了更现代、函数式且线程安全的解决方案。


🔧 常见类介绍

1️⃣ LocalDate - 仅包含日期(年-月-日)

用于表示“今天是哪天”,例如:2025-08-06

LocalDate today = LocalDate.now();
System.out.println(today); // 输出: 2025-08-06

2️⃣ LocalDateTime - 日期 + 时间(无时区)

适用于不涉及时区但需要精确到秒的业务场景。

LocalDateTime now = LocalDateTime.now();
System.out.println(now); // 输出: 2025-08-06T14:23:34.123

3️⃣ DateTimeFormatter - 格式化与解析神器

相比 SimpleDateFormat,它是线程安全的,推荐用于所有日期格式化/解析场景。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatted = LocalDateTime.now().format(formatter);
System.out.println(formatted); // 输出: 2025-08-06 14:23:34

🧪 实战示例:获取过去 60 天的日期字符串

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

// 获取60天前的日期,并格式化为字符串
String sixtyDaysAgo = LocalDate.now().minusDays(60).format(dateTimeFormatter);

System.out.println("60天前的日期是:" + sixtyDaysAgo);
// 输出: 2025-06-07

🔄 常见应用场景

🔍 1. 获取本月第一天

LocalDate firstDay = LocalDate.now().withDayOfMonth(1);
System.out.println("本月第一天是:" + firstDay);

📆 2. 计算两个日期之间的天数差

LocalDate start = LocalDate.of(2025, 1, 1);
LocalDate end = LocalDate.now();

long daysBetween = ChronoUnit.DAYS.between(start, end);
System.out.println("相差天数:" + daysBetween);

🧭 3. 将字符串日期转换为 LocalDate

String dateStr = "2025-05-10";
LocalDate parsedDate = LocalDate.parse(dateStr, dateTimeFormatter);
System.out.println("解析后的日期对象:" + parsedDate);

📌 小结

类名 说明 特性
LocalDate 表示不含时间的日期 无时区、安全、轻量
LocalDateTime 表示日期 + 时间(无时区) 精确到秒
DateTimeFormatter 格式化与解析日期时间字符串 线程安全,推荐使用

相比 DateSimpleDateFormatjava.time 更加现代、线程安全,是我们在编写时间逻辑时的首选。


📘 参考资料


🤝 交流 & 资料领取

🎁 想获取更多 Java 实战案例 + AI 辅助工具推荐?
📩 添加默语微信:Solitudemind,备注【Java时间】即可进群领取!

更多推荐