本文内容来源于Hutool官方文档,更多内容请去官网查看
//当前时间:date = 2019-09-17 16:59:23
Date date = DateUtil.date();
//当前时间:date2 = 2019-09-17 16:59:23
Date date2 = DateUtil.date(Calendar.getInstance());
//当前时间:date3 = 2019-09-17 16:59:23
Date date3 = DateUtil.date(System.currentTimeMillis());
//当前时间字符串:now = 2019-09-17 16:59:23
String now = DateUtil.now();
//当前日期字符串:today = 2019-09-17
String today= DateUtil.today();
Date date1 = DateUtil.parse("2019-09-17");
Date date2 = DateUtil.parse("2019-09-17", DatePattern.NORM_DATE_PATTERN);
Date date3 = DateUtil.parse("2019/09/17", "yyyy/MM/dd");
Date date4 = DateUtil.parse("2019:09:17", "yyyy:MM:dd");
DatePattern类:
DatePattern.NORM_DATE_PATTERN ---------------- yyyy年MM月dd日
DatePattern.ISO8601_PATTERN ---------------- yyyy-MM-dd HH:mm:ss,SSS
DatePattern.PURE_DATE_PATTERN ---------------- yyyyMMdd
…等等,大多数格式都有
Date date1 = DateUtil.parse("2019-09-17");
//结果: 2019/09/17
String format = DateUtil.format(date1, "yyyy/MM/dd");
//常用格式的格式化,结果:2017-03-01
String formatDate = DateUtil.formatDate(date1);
//结果:2019-09-17 00:00:00
String formatDateTime = DateUtil.formatDateTime(date1);
//结果:00:00:00
String formatTime = DateUtil.formatTime(date1);
Date date = DateUtil.date();
//获得年的部分:year = 2019
int year = DateUtil.year(date);
//获得月份,从0开始计数:month = 8
int month = DateUtil.month(date);
//获得月份枚举 :monthEnum = SEPTEMBER
Month monthEnum = DateUtil.monthEnum(date);
有的时候我们需要获得每天的开始时间、结束时间,每月的开始和结束时间等等,DateUtil也提供了相关方法:
String now = DateUtil.now();
Date date = DateUtil.parse(now);
//一天的开始,结果:2019-09-17 00:00:00
Date beginOfDay = DateUtil.beginOfDay(date);
//一天的结束,结果:2019-09-17 23:59:59
Date endOfDay = DateUtil.endOfDay(date);
日期或时间的偏移指针对某个日期增加或减少分、小时、天等等,达到日期变更的目的。Hutool也针对其做了大量封装
String now = DateUtil.now();
//date = 2019-09-17 17:35:35
Date date = DateUtil.parse(now);
//结果:newDate = 2019-09-19 17:35:35
Date newDate = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2);
//常用偏移,结果:newDate2 = 2019-09-20 17:35:35
DateTime newDate2 = DateUtil.offsetDay(date, 3);
//常用偏移,结果:newDate3 = 2019-09-17 14:35:35
DateTime newDate3 = DateUtil.offsetHour(date, -3);
//针对当前时间,提供了简化的偏移方法(例如昨天、上周、上个月等):
//昨天
DateUtil.yesterday()
//明天
DateUtil.tomorrow()
//上周
DateUtil.lastWeek()
//下周
DateUtil.nextWeek()
//上个月
DateUtil.lastMonth()
//下个月
DateUtil.nextMonth()
有时候我们需要计算两个日期之间的时间差(相差天数、相差小时数等等),Hutool将此类方法封装为between方法:
Date date1 = DateUtil.parse("2019-09-20 17:35:35");
Date date2 = DateUtil.parse("2019-09-17 14:35:35");
//这里若date1和date2换位置,输出结果不变:betweenDay = 3
long betweenDay = DateUtil.between(date1, date2, DateUnit.DAY);
有时候我们希望看到易读的时间差,比如XX天XX小时XX分XX秒,此时使用DateUtil.formatBetween方法:
//Level.MINUTE表示精确到分
String formatBetween = DateUtil.formatBetween(between, Level.MINUTE);
//输出:31天1小时
Console.log(formatBetween);
// "摩羯座"
String zodiac = DateUtil.getZodiac(Month.JANUARY.getValue(), 19);
// "狗"
String chineseZodiac = DateUtil.getChineseZodiac(1994);
// 创建日期范围生成器
DateTime start = DateUtil.parse("2021-01-31");
DateTime end = DateUtil.parse("2021-03-31");
DateRange range = DateUtil.range(start, end, DateField.MONTH);
// 简单使用
// 开始时间
DateRange startRange = DateUtil.range(DateUtil.parse("2017-01-01"), DateUtil.parse("2017-01-31"), DateField.DAY_OF_YEAR);
// 结束时间
DateRange endRange = DateUtil.range(DateUtil.parse("2017-01-31"), DateUtil.parse("2017-02-02"), DateField.DAY_OF_YEAR);
// 交集 返回 [2017-01-31 00:00:00]
List<DateTime> dateTimes = DateUtil.rangeContains(startRange, endRange);
// 差集 返回 [2017-02-01 00:00:00, 2017-02-02 00:00:00]
List<DateTime> dateNotTimes = DateUtil.rangeNotContains(startRange,endRange);
// 区间 返回[2017-01-01 00:00:00, 2017-01-02 00:00:00, 2017-01-03 00:00:00]
List<DateTime> rangeToList = DateUtil.rangeToList(DateUtil.parse("2017-01-01"), DateUtil.parse("2017-01-03"), DateField.DAY_OF_YEAR);
//年龄
DateUtil.ageOfNow("1990-01-30");
//是否闰年
DateUtil.isLeapYear(2017);
DateTime的成员方法与DateUtil中的静态方法所对应,因为是成员方法,因此可以使用更少的参数操作日期时间。
DateTime dateTime = new DateTime("2017-01-05 12:34:23", DatePattern.NORM_DATETIME_FORMAT);
//年,结果:2017
int year = dateTime.year();
//季度(非季节),结果:Season.SPRING
Season season = dateTime.seasonEnum();
//月份,结果:Month.JANUARY
Month month = dateTime.monthEnum();
//日,结果:5
int day = dateTime.dayOfMonth();
调用toString()方法即可返回格式为yyyy-MM-dd HH:mm:ss的字符串,调用toString(String format)可以返回指定格式的字符串。
DateTime dateTime = new DateTime("2017-01-05 12:34:23", DatePattern.NORM_DATETIME_FORMAT);
//结果:2017-01-05 12:34:23
String dateStr = dateTime.toString();
//结果:2017/01/05
String dateStr = dateTime.toString("yyyy/MM/dd");
ChineseDate表示了农历的对象,构建此对象既可以使用公历的日期,也可以使用农历的日期。
//通过农历构建
ChineseDate chineseDate = new ChineseDate(1992,12,14);
//通过公历构建
ChineseDate chineseDate = new ChineseDate(DateUtil.parseDate("1993-01-06"));
//通过公历构建
ChineseDate date = new ChineseDate(DateUtil.parseDate("2020-01-25"));
// 一月
date.getChineseMonth();
// 正月
date.getChineseMonthName();
// 初一
date.getChineseDay();
// 庚子
date.getCyclical();
// 生肖:鼠
date.getChineseZodiac();
// 传统节日(部分支持,逗号分隔):春节
date.getFestivals();
// 庚子鼠年 正月初一
date.toString();
//通过公历构建
ChineseDate chineseDate = new ChineseDate(DateUtil.parseDate("2020-08-28"));
// 庚子年甲申月癸卯日
String cyclicalYMD = chineseDate.getCyclicalYMD();
String dateStr = "2020-01-23T12:23:56";
DateTime dt = DateUtil.parse(dateStr);
// Date对象转换为LocalDateTime
LocalDateTime of = LocalDateTimeUtil.of(dt);
// 时间戳转换为LocalDateTime
of = LocalDateTimeUtil.ofUTC(dt.getTime());
// 解析ISO时间
LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");
// 解析自定义格式时间
localDateTime = LocalDateTimeUtil.parse("2020-01-23", DatePattern.NORM_DATE_PATTERN);
LocalDate localDate = LocalDateTimeUtil.parseDate("2020-01-23");
// 解析日期时间为LocalDate,时间部分舍弃
localDate = LocalDateTimeUtil.parseDate("2020-01-23T12:23:56", DateTimeFormatter.ISO_DATE_TIME);
LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");
// "2020-01-23 12:23:56"
String format = LocalDateTimeUtil.format(localDateTime, DatePattern.NORM_DATETIME_PATTERN);
final LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");
// 增加一天
// "2020-01-24T12:23:56"
LocalDateTime offset = LocalDateTimeUtil.offset(localDateTime, 1, ChronoUnit.DAYS);
//如果是减少时间,offset第二个参数传负数即可:
// "2020-01-22T12:23:56"
offset = LocalDateTimeUtil.offset(localDateTime, -1, ChronoUnit.DAYS);
LocalDateTime start = LocalDateTimeUtil.parse("2019-02-02T00:00:00");
LocalDateTime end = LocalDateTimeUtil.parse("2020-02-02T00:00:00");
Duration between = LocalDateTimeUtil.between(start, end);
// 365
between.toDays();
LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");
// "2020-01-23T00:00"
LocalDateTime beginOfDay = LocalDateTimeUtil.beginOfDay(localDateTime);
// "2020-01-23T23:59:59.999999999"
LocalDateTime endOfDay = LocalDateTimeUtil.endOfDay(localDateTime);
TimeInterval timer = DateUtil.timer();
//---------------------------------
//-------这是执行过程
//---------------------------------
timer.interval();//花费毫秒数
timer.intervalRestart();//返回花费时间,并重置开始时间
timer.intervalMinute();//花费分钟数
也可以实现分组计时:
final TimeInterval timer = new TimeInterval();
// 分组1
timer.start("1");
ThreadUtil.sleep(800);
// 分组2
timer.start("2");
ThreadUtil.sleep(900);
Console.log("Timer 1 took {} ms", timer.intervalMs("1"));
Console.log("Timer 2 took {} ms", timer.intervalMs("2"));