• 日期时间工具-DateUtil
    • 由来
    • 方法
      • 转换
        • Date、long、Calendar之间的相互转换
        • 字符串转日期
        • 格式化日期输出
        • 获取Date对象的某个部分
        • 开始和结束时间
        • 日期时间偏移
        • 日期时间差
        • 格式化时间差
        • 计时器
        • 其它

    日期时间工具-DateUtil

    由来

    考虑到Java本身对日期时间的支持有限,并且Date和Calendar对象的并存导致各种方法使用混乱和复杂,故使用此工具类做了封装。这其中的封装主要是日期和字符串之间的转换,以及提供对日期的定位(一个月前等等)。

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

    方法

    转换

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

    1. //当前时间
    2. Date date = DateUtil.date();
    3. //当前时间
    4. Date date2 = DateUtil.date(Calendar.getInstance());
    5. //当前时间
    6. Date date3 = DateUtil.date(System.currentTimeMillis());
    7. //当前时间字符串,格式:yyyy-MM-dd HH:mm:ss
    8. String now = DateUtil.now();
    9. //当前日期字符串,格式:yyyy-MM-dd
    10. String today= DateUtil.today();

    字符串转日期

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

    • 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对象的某个部分

    1. Date date = DateUtil.date();
    2. //获得年的部分
    3. DateUtil.year(date);
    4. //获得月份,从0开始计数
    5. DateUtil.month(date);
    6. //获得月份枚举
    7. DateUtil.monthEnum(date);
    8. //.....

    开始和结束时间

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

    1. String dateStr = "2017-03-01 22:33:23";
    2. Date date = DateUtil.parse(dateStr);
    3. //一天的开始,结果:2017-03-01 00:00:00
    4. Date beginOfDay = DateUtil.beginOfDay(date);
    5. //一天的结束,结果:2017-03-01 23:59:59
    6. 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. //昨天
    2. DateUtil.yesterday()
    3. //明天
    4. DateUtil.tomorrow()
    5. //上周
    6. DateUtil.lastWeek()
    7. //下周
    8. DateUtil.nextWeek()
    9. //上个月
    10. DateUtil.lastMonth()
    11. //下个月
    12. DateUtil.nextMonth()

    日期时间差

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

    1. String dateStr1 = "2017-03-01 22:33:23";
    2. Date date1 = DateUtil.parse(dateStr1);
    3. String dateStr2 = "2017-04-01 23:33:23";
    4. Date date2 = DateUtil.parse(dateStr2);
    5. //相差一个月,31天
    6. long betweenDay = DateUtil.between(date1, date2, DateUnit.DAY);

    格式化时间差

    有时候我们希望看到易读的时间差,比如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. //是否闰年
    4. DateUtil.isLeapYear(2017);