apache的时间工具类DateUtils

发布时间 2023-11-26 19:59:14作者: 残城碎梦

org.apache.commons.lang3.DateUtils是Apache提供的时间工具类。

<!-- StringUtils、NumberUtils等工具类 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.10</version>
</dependency>

字符串转日期

parseDate()和parseDateStrictly()区别是:

parseDateStrictly()会严格校验时间格式,如示例中7月是没有32日的,所以会转换错误,而parseDate()可以正常转换,并不会报错。

Date date = DateUtils.parseDate("20230732010101", "yyyyMMddHHmmss");
//输出:20230801010101
Date date = DateUtils.parseDateStrictly("20230732010101", "yyyyMMddHHmmss");
//输出:java.text.ParseException: Unable to parse the date: 20230732010101

日期转字符串

DateFormatUtils.format(new Date(), "yyyyMMddHHmmss")
//输出:20230728155345

指定时间加减指定数量个周期

Date date = DateUtils.addDays(new Date(), 1);
DateFormatUtils.format(date, "yyyyMMddHHmmss");
//输出:20230729155137
Date date = DateUtils.addYears(new Date(), 1);
//输出:20240728155217

设置指定时间

Date date = DateUtils.setDays(new Date(), 10);
DateFormatUtils.format(date, "yyyyMMddHHmmss");
//输出:20230710155834
Date date = DateUtils.setMinutes(new Date(), 10);
DateFormatUtils.format(date, "yyyyMMddHHmmss");
//输出:20230728151009

根据指定时间获取一个时间范围

第一个参数是目标日期。

第二个参数是控制时间范围的,即:是周范围还是月范围,是将目标日期作为起始日期,还是中心日期。

//以当前时间为起始日期,以一周后日期为终止日期
Iterator<Calendar> it = DateUtils.iterator(new Date(), DateUtils.RANGE_WEEK_RELATIVE);
while(it.hasNext()) {
   Calendar c = it.next();
   System.out.println(DateFormatUtils.format(c.getTime(), "yyyyMMddHHmmss"));
}
//输出:
//20230728000000
//20230729000000
//20230730000000
//20230731000000
//20230801000000
//20230802000000
//20230803000000

判断两日期是否同天

//判断两日期是否同天
boolean same = DateUtils.isSameDay(new Date(), new Date());
//输出:true
//判断两日期是否同毫秒
boolean same = DateUtils.isSameInstant(new Date(), new Date());
//输出:true

获取日期上限

如果日期时间为2023年7月28日13:45:01:231,上限周期设置为HOUR,获取目标时间是:2023年7月28日14:00:00.000;如果上限周期是MONTH,获取目标时间是:2023年8月1日0:00:00.000。

Date date = DateUtils.ceiling(new Date(), Calendar.YEAR);
DateFormatUtils.format(date, "yyyyMMddHHmmss");
//输出:20240101000000