Hutool:时间日期工具类(DateUtil、DateTime、农历日期-ChineseDate、LocalDateTimeUtil、计时器工具-TimeInterval)

本文内容来源于Hutool官方文档,更多内容请去官网查看

目录

  • 日期时间工具-DateUtil
    • 1、Date、long、Calendar之间的相互转换
    • 2、字符串转日期
    • 3、格式化日期输出
    • 4、获取Date对象的某个部分
    • 5、一天的开始和结束时间
    • 6、日期时间偏移
    • 7、日期时间差
    • 8、格式化时间差
    • 9、星座和属相
    • 10、日期范围
    • 11、其他
  • 日期时间对象-DateTime
    • 1、获取日期成员(年、月、日等)
    • 2、格式化为字符串
  • 农历日期-ChineseDate
    • 1、构建ChineseDate对象
    • 2、基本使用
    • 3、获取天干地支
  • 工具-LocalDateTimeUtil
    • 1、日期转换
    • 2、日期字符串解析
    • 3、日期格式化
    • 4、日期偏移
    • 5、计算时间间隔
    • 6、一天的开始和结束
  • 计时器工具-TimeInterval

日期时间工具-DateUtil

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

//当前时间: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();

2、字符串转日期

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
…等等,大多数格式都有

3、格式化日期输出

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);

4、获取Date对象的某个部分

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);

5、一天的开始和结束时间

有的时候我们需要获得每天的开始时间、结束时间,每月的开始和结束时间等等,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);

6、日期时间偏移

日期或时间的偏移指针对某个日期增加或减少分、小时、天等等,达到日期变更的目的。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()

7、日期时间差

有时候我们需要计算两个日期之间的时间差(相差天数、相差小时数等等),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);

8、格式化时间差

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

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

9、星座和属相

// "摩羯座"
String zodiac = DateUtil.getZodiac(Month.JANUARY.getValue(), 19);

// "狗"
String chineseZodiac = DateUtil.getChineseZodiac(1994);

10、日期范围

// 创建日期范围生成器
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);

11、其他

//年龄
DateUtil.ageOfNow("1990-01-30");

//是否闰年
DateUtil.isLeapYear(2017);

日期时间对象-DateTime

1、获取日期成员(年、月、日等)

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();

2、格式化为字符串

调用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

1、构建ChineseDate对象

ChineseDate表示了农历的对象,构建此对象既可以使用公历的日期,也可以使用农历的日期。

//通过农历构建
ChineseDate chineseDate = new ChineseDate(1992,12,14);

//通过公历构建
ChineseDate chineseDate = new ChineseDate(DateUtil.parseDate("1993-01-06"));

2、基本使用

//通过公历构建
ChineseDate date = new ChineseDate(DateUtil.parseDate("2020-01-25"));
// 一月
date.getChineseMonth();
// 正月
date.getChineseMonthName();
// 初一
date.getChineseDay();
// 庚子
date.getCyclical();
// 生肖:鼠
date.getChineseZodiac();
// 传统节日(部分支持,逗号分隔):春节
date.getFestivals();
// 庚子鼠年 正月初一
date.toString();

3、获取天干地支

//通过公历构建
ChineseDate chineseDate = new ChineseDate(DateUtil.parseDate("2020-08-28"));

// 庚子年甲申月癸卯日
String cyclicalYMD = chineseDate.getCyclicalYMD();

工具-LocalDateTimeUtil

1、日期转换

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());

2、日期字符串解析

// 解析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);

3、日期格式化

LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");

// "2020-01-23 12:23:56"
String format = LocalDateTimeUtil.format(localDateTime, DatePattern.NORM_DATETIME_PATTERN);

4、日期偏移

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);

5、计算时间间隔

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();

6、一天的开始和结束

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

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"));

你可能感兴趣的:(Hutool工具类,java,spring,intellij-idea)