前面用两篇文章《日期处理第一篇:优雅好用的Java日期工具类Joda-Time》《日期处理第二篇:Java8新时间和日期API,看完你就全明白了》介绍了Java中日期处理常用的类,为什么还会有第三篇Hutool日期类的介绍呢?因为他实在太好用了,不信你看。
官网文章介绍的很好,推荐可以直接去看官网:https://doc.hutool.cn/pages/Date/
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-http</artifactId>
</dependency>
</dependencies>
日期时间包是Hutool的核心包之一,提供了很多方便的工具类,而且不得不说本地化做的很好。由于官网文档非常清晰明了,所以这里就不再一一系统的去讲解使用方式了,这里只简单过一下常用的方法和好用的方法。
字符串转日期
这里已经包含了常用的日期时间格式,而且还能自动去识别,对与一些项目使用起来着实很方便。
String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr);
// 或者
Date date2 = DateUtil.parse(dateStr, "yyyy-MM-dd");
将字符串转换为日期
String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr);
//结果 2017/03/01
String format = DateUtil.format(date, "yyyy/MM/dd");
//常用格式的格式化,结果:2017-03-01
String formatDate = DateUtil.formatDate(date);
//结果:2017-03-01 00:00:00
String formatDateTime = DateUtil.formatDateTime(date);
//结果:00:00:00
String formatTime = DateUtil.formatTime(date);
通过月份枚举可以获得某个月的最后一天
// 31
int lastDay = Month.of(Calendar.JANUARY).getLastDay(false);
星座和属相
可以说是挺好用了。
// "摩羯座"
String zodiac = DateUtil.getZodiac(Month.JANUARY.getValue(), 19);
// "狗"
String chineseZodiac = DateUtil.getChineseZodiac(1994);
计算年龄
//年龄
DateUtil.ageOfNow("1990-01-30");
//是否闰年
DateUtil.isLeapYear(2017);
农历日期,提供了生肖、天干地支、传统节日等方法。
/通过公历构建
ChineseDate date = new ChineseDate(DateUtil.parseDate("2020-01-25"));
// 一月
date.getChineseMonth();
// 正月
date.getChineseMonthName();
// 初一
date.getChineseDay();
// 庚子
date.getCyclical();
// 生肖:鼠
date.getChineseZodiac();
// 传统节日(部分支持,逗号分隔):春节
date.getFestivals();
// 庚子鼠年 正月初一
date.toString();
如果有用到农历相关,可以尝试一下。
从Hutool的5.4.x开始,Hutool加入了针对JDK8+日期API的封装,此工具类的功能包括LocalDateTime和LocalDate的解析、格式化、转换等操作。所以推荐使用这个。
日期转换
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 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);
Hutool中的日期和时间API大量考虑中国时间格式,有着方便的方法可以直接使用,提高了我们的开发效率。如果你要处理农历时间,推荐直接使用hutool这个就行了,但是鉴于Java8中的API其实已经很方便了,所以尽量使用jdk8内置的即可。毕竟额外的包也会带来额外的负担,大家可以按需选择。