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包
📝 发现内容有误?点击此处直接编辑