全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-08 7 分钟 ✍️ juanwangdev

DateUtils

DateUtils是Apache Commons Lang提供的日期操作工具类。

概述

所在包

org.apache.commons.lang3.time.DateUtils

依赖引入

XML
<dependency>
    <groupId>org.apache.commons.lang3</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>

核心特点

  • 操作java.util.Date对象
  • 日期加减、比较、格式化
  • Java 8+推荐使用java.time包

注意:Java 8+推荐使用LocalDate/LocalDateTime,DateUtils适用于旧代码。

日期加减

add系列方法

Java
Date now = new Date();

// 增加天数
Date tomorrow = DateUtils.addDays(now, 1);
Date nextWeek = DateUtils.addDays(now, 7);

// 减少天数
Date yesterday = DateUtils.addDays(now, -1);

// 增加小时
Date nextHour = DateUtils.addHours(now, 1);

// 增加分钟
Date nextMinute = DateUtils.addMinutes(now, 30);

// 增加秒
Date nextSecond = DateUtils.addSeconds(now, 60);

// 增加月/年
Date nextMonth = DateUtils.addMonths(now, 1);
Date nextYear = DateUtils.addYears(now, 1);

addMilliseconds毫秒

Java
Date after = DateUtils.addMilliseconds(now, 1000);  // 增加1秒(1000毫秒)

日期比较

isSameDay比较同一天

Java
Date date1 = new Date();           // 今天10:00
Date date2 = new Date();           // 今天15:00

boolean same = DateUtils.isSameDay(date1, date2);
// true(同一天,忽略时分秒)

isSameInstant完全相同

Java
Date date1 = new Date();
Date date2 = new Date();

boolean same = DateUtils.isSameInstant(date1, date2);
// true/false(毫秒级比较)

isSameHour/Minute比较同一小时/分钟

Java
Date date1 = ...
Date date2 = ...

boolean sameHour = DateUtils.isSameHour(date1, date2);     // 同一小时
boolean sameMinute = DateUtils.isSameMinute(date1, date2); // 同一分钟

日期截断

truncate截断到指定精度

Java
Date now = new Date();  // 2026-05-08 14:30:25.123

// 截断到天(清除时分秒)
Date day = DateUtils.truncate(now, DateUtils.SAMPLE_DATE_TRUNCATE);
// 2026-05-08 00:00:00.000

// 截断到小时
Date hour = DateUtils.truncate(now, Calendar.HOUR);
// 2026-05-08 14:00:00.000

// 截断到分钟
Date minute = DateUtils.truncate(now, Calendar.MINUTE);
// 2026-05-08 14:30:00.000

truncate参数

参数说明
Calendar.YEAR截断到年
Calendar.MONTH截断到月
Calendar.DAY_OF_MONTH截断到天
Calendar.HOUR截断到小时
Calendar.MINUTE截断到分钟
Calendar.SECOND截断到秒

日期解析

parseDate解析字符串

Java
String[] patterns = {"yyyy-MM-dd", "yyyy/MM/dd", "MM/dd/yyyy"};

Date date = DateUtils.parseDate("2026-05-08", patterns);
Date date = DateUtils.parseDate("2026/05/08", patterns);
Date date = DateUtils.parseDate("05/08/2026", patterns);

parseDate支持多种格式匹配,适合不确定输入格式的场景。

parseDateStrictly严格解析

Java
String[] patterns = {"yyyy-MM-dd"};
Date date = DateUtils.parseDateStrictly("2026-05-08", patterns);
// 严格匹配格式

日期范围

getFragmentInDays获取片段天数

Java
Date date = new Date();  // 某年某月

// 获取月内的天数
int days = DateUtils.getFragmentInDays(date, Calendar.MONTH);

循环日期

iterator迭代日期范围

Java
Date start = DateUtils.parseDate("2026-01-01", "yyyy-MM-dd");
Date end = DateUtils.parseDate("2026-01-31", "yyyy-MM-dd");

Iterator<Date> iterator = DateUtils.iterator(start, end, DateUtils.RANGE_DAYS);
while (iterator.hasNext()) {
    Date d = iterator.next();
    System.out.println(d);
}

设置日期字段

setYears/setMonths设置字段

Java
Date date = new Date();

Date newDate = DateUtils.setYears(date, 2027);      // 设置年份
Date newDate = DateUtils.setMonths(date, 12);       // 设置月份
Date newDate = DateUtils.setDays(date, 15);         // 设置天数

Java 8+替代方案

推荐使用java.time

Java
// 旧方式(DateUtils)
Date tomorrow = DateUtils.addDays(new Date(), 1);

// 新方式(java.time,推荐)
LocalDate tomorrow = LocalDate.now().plusDays(1);
LocalDateTime nextHour = LocalDateTime.now().plusHours(1);

// 比较同一天
boolean sameDay = localDate1.equals(localDate2);

推荐:新项目使用java.time包,更简洁、线程安全、功能强大。

要点总结

  • DateUtils是Apache Commons Lang的日期工具类
  • addDays/addHours增加天数/小时(负数减少)
  • isSameDay比较同一天(忽略时分秒)
  • truncate截断日期精度(如截断到天)
  • parseDate解析多种格式字符串
  • setYears/setMonths设置日期字段
  • Java 8+推荐使用LocalDate/LocalDateTime
  • 新项目优先选择java.time包

📝 发现内容有误?点击此处直接编辑

← 上一篇 Collections
下一篇 → ExceptionUtils
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库