日期时间工具-DateUtil

    对于Date对象,为了便捷,使用了一个DateTime类来代替之,继承自Date对象,主要的便利在于,覆盖了toString()方法,返回yyyy-MM-dd HH:mm:ss形式的字符串,方便在输出时的调用(例如日志记录等),提供了众多便捷的方法对日期对象操作,关于DateTime会在相关章节介绍。

    方法

    Date、long、Calendar之间的相互转换

    字符串转日期

    方法会自动识别一些常用格式,包括:

    • yyyy-MM-dd HH:mm:ss
    • yyyy-MM-dd
    • HH:mm:ss
    • yyyy-MM-dd HH:mm
    • yyyy-MM-dd HH:mm:ss.SSS
    1. String dateStr = "2017-03-01";
    2. Date date = DateUtil.parse(dateStr);
    1. String dateStr = "2017-03-01";
    2. Date date = DateUtil.parse(dateStr, "yyyy-MM-dd");

    格式化日期输出

    1. String dateStr = "2017-03-01";
    2. Date date = DateUtil.parse(dateStr);
    3. //结果 2017/03/01
    4. String format = DateUtil.format(date, "yyyy/MM/dd");
    5. //常用格式的格式化,结果:2017-03-01
    6. String formatDate = DateUtil.formatDate(date);
    7. //结果:2017-03-01 00:00:00
    8. String formatDateTime = DateUtil.formatDateTime(date);
    9. //结果:00:00:00
    10. String formatTime = DateUtil.formatTime(date);

    获取Date对象的某个部分

    开始和结束时间

    有的时候我们需要获得每天的开始时间、结束时间,每月的开始和结束时间等等,DateUtil也提供了相关方法:

    1. String dateStr = "2017-03-01 22:33:23";
    2. Date date = DateUtil.parse(dateStr);
    3. //一天的开始,结果:2017-03-01 00:00:00
    4. //一天的结束,结果:2017-03-01 23:59:59
    5. Date endOfDay = DateUtil.endOfDay(date);

    日期时间偏移

    日期或时间的偏移指针对某个日期增加或减少分、小时、天等等,达到日期变更的目的。Hutool也针对其做了大量封装

    1. String dateStr = "2017-03-01 22:33:23";
    2. Date date = DateUtil.parse(dateStr);
    3. //结果:2017-03-03 22:33:23
    4. Date newDate = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2);
    5. //常用偏移,结果:2017-03-04 22:33:23
    6. DateTime newDate2 = DateUtil.offsetDay(date, 3);
    7. //常用偏移,结果:2017-03-01 19:33:23
    8. DateTime newDate3 = DateUtil.offsetHour(date, -3);
    1. DateUtil.yesterday()
    2. //明天
    3. DateUtil.tomorrow()
    4. //上周
    5. DateUtil.lastWeek()
    6. //下周
    7. DateUtil.nextWeek()
    8. DateUtil.lastMonth()
    9. //下个月
    10. DateUtil.nextMonth()

    日期时间差

    有时候我们需要计算两个日期之间的时间差(相差天数、相差小时数等等),Hutool将此类方法封装为between方法:

    格式化时间差

    有时候我们希望看到易读的时间差,比如XX天XX小时XX分XX秒,此时使用DateUtil.formatBetween方法:

    1. //Level.MINUTE表示精确到分
    2. String formatBetween = DateUtil.formatBetween(between, Level.MINUTE);
    3. //输出:31天1小时
    4. Console.log(formatBetween);

    计时器

    1. TimeInterval timer = DateUtil.timer();
    2. //---------------------------------
    3. //-------这是执行过程
    4. //---------------------------------
    5. timer.interval();//花费毫秒数
    6. timer.intervalRestart();//返回花费时间,并重置开始时间
    7. timer.intervalMinute();//花费分钟数

    其它

    1. //年龄
    2. DateUtil.ageOfNow("1990-01-30");
    3. DateUtil.isLeapYear(2017);