Hutool⽇期时间⼯具-DateUtil使⽤(格式化输出,字符串转⽇
期,时间差,格式化时。。。
考虑到Java本⾝对⽇期时间的⽀持有限,并且Date和Calendar对象的并存导致各种⽅法使⽤混乱和复杂,故使⽤此⼯具类做了封装。这其中的封装主要是⽇期和字符串之间的转换,以及提供对⽇期的定位(⼀个⽉前等等)。
对于Date对象,为了便捷,使⽤了⼀个DateTime类来代替之,继承⾃Date对象,主要的便利在于,覆盖了toString()⽅法,返回yyyy-MM-dd HH:mm:ss形式的字符串,⽅便在输出时的调⽤(例如⽇志记录等),提供了众多便捷的⽅法对⽇期对象操作。
1 格式化输出
String dateStr = "2021-04-21 01:02:03";
Date date = DateUtil.parse(dateStr);
//结果 2021/04/21
String format = DateUtil.format(date, "yyyy/MM/dd");
//常⽤格式的格式化,结果:2021-04-21
String formatDate = DateUtil.formatDate(date);
//结果:2021-04-01 01:02:03
String formatDateTime = DateUtil.formatDateTime(date);
//结果:01:02:03
String formatTime = DateUtil.formatTime(date);
2 字符串转⽇期
DateUtil.parse⽅法会⾃动识别⼀些常⽤格式,包括:
(1)yyyy-MM-dd HH:mm:ss
(2)yyyy-MM-dd
(3)HH:mm:ss
(4)yyyy-MM-dd HH:mm
(5)yyyy-MM-dd HH:mm:ss.SSS
String dateStr = "2021-04-21";
Date date = DateUtil.parse(dateStr);
我们也可以使⽤⾃定义⽇期格式转化:
String dateStr = "2021-04-21";
Date date = DateUtil.parse(dateStr, "yyyy-MM-dd");
3 ⽇期时间差
有时候我们需要计算两个⽇期之间的时间差(相差天数、相差⼩时数等等),Hutool将此类⽅法封装为between⽅法:
Date startDate=DateUtil.parse("2021-04-20 02:00:00");
Date endDate=DateUtil.parse("2021-04-21 05:10:00");
//相差周数
long week=DateUtil.between(startDate,endDate,DateUnit.WEEK);
//相差天数
long day=DateUtil.between(startDate,endDate,DateUnit.DAY);
//相差⼩时数
long hour=DateUtil.between(startDate,endDate,DateUnit.HOUR);
//相差分钟数
long minute=DateUtil.between(startDate,endDate,DateUnit.MINUTE);
//相差秒数
long second=DateUtil.between(startDate,endDate,DateUnit.SECOND);
//相差毫秒数
long millis=DateUtil.between(startDate,endDate,DateUnit.MS);
4 格式化时间差
有时候我们希望看到易读的时间差,⽐如XX天XX⼩时XX分XX秒,此时使⽤DateUtil.formatBetween⽅法:
Date startDate=DateUtil.parse("2021-04-20 02:00:00");
Date endDate=DateUtil.parse("2021-04-21 05:10:00");
//相差毫秒数
long millis=DateUtil.between(startDate,endDate,DateUnit.MS);
//相差1天(天)
String formatDay = DateUtil.formatBetween(millis, BetweenFormatter.Level.DAY);
//相差1天3⼩时(⼩时)
String formatHour = DateUtil.formatBetween(millis, BetweenFormatter.Level.HOUR);
//相差1天3⼩时10分(分钟)
String formatMinute = DateUtil.formatBetween(millis, BetweenFormatter.Level.MINUTE);
//相差1天3⼩时10分(秒)
String formatSecond = DateUtil.formatBetween(millis, BetweenFormatter.Level.SECOND);
//相差1天3⼩时10分(毫秒)
String formatMillis = DateUtil.formatBetween(millis, BetweenFormatter.Level.MILLISECOND);
注:
formatBetween(long betweenMs, Level level) 的第⼀个参数betweenMs为相差毫秒数。
5 Long、Date相互转化
5.1 Date转Long
Long date = DateUtil.parse("2021-05-06", "yyyy-MM-dd").getTime();
5.2 Long转Date
Long longDate=DateUtil.parse("2021-05-06", "yyyy-MM-dd").getTime();
Date date = DateUtil.date(longDate);
6 星期⼏
/**
* 返回星期⼏
* @param date
* @return
*/
public static String dayOfWeek(Date date){
int day= DateUtil.dayOfWeek(date);
switch (day){
case 1:return "星期天";
case 2:return "星期⼀";
case 3:return "星期⼆";
case 4:return "星期三";
case 5:return "星期四";
case 6:return "星期五";
case 7:return "星期六";
default:return "";
}
}
7 ⽇期时间偏移
⽇期或时间的偏移指针对某个⽇期增加或减少分、⼩时、天等等,达到⽇期变更的⽬的。Hutool也针对其做了⼤量封装。
String dateStr = "2021-05-25 22:33:23";
Date date = DateUtil.parse(dateStr);
//减3天
DateUtil.offsetDay(date, -3);
DateUtil.offset(date, DateField.DAY_OF_YEAR, -3);
针对当前时间,提供了简化的偏移⽅法(例如昨天、上周、上个⽉等):
//昨天
//明天
//上周
string转date的方法DateUtil.lastWeek()
//下周
//上个⽉
DateUtil.lastMonth()
//下个⽉
想要了解更多的⽇期时间偏移⽅法请查看以下博客。
8 获取⽇期时间指定部分
/
/年
int year = ar(date);//2021
//年和季度
String yearAndQuarter = arAndQuarter(date);//20212
//季度
int quarter = DateUtil.quarter(date);//2
//⽉,从0开始
int month = h(date);//5 六⽉
//获得指定⽇期是所在年份的第⼏周
// 此⽅法返回值与⼀周的第⼀天有关,⽐如: 2016年1⽉3⽇为周⽇,如果⼀周的第⼀天为周⽇,那这天是第⼆周(返回2)        // 如果⼀周的第⼀天为周⼀,那这天是第⼀周(返回1)跨年的那个星期得到的结果总是1
//⼀周的第⼀天为周⼀
int weekOfYear = DateUtil.weekOfYear(date);//27
//⼀⽉的第⼏周,⼀周的第⼀天为周⼀
int weekOfMonth = DateUtil.weekOfMonth(date);//5
//⼀周的第⼏天,从星期天开始,从1开始
int dayOfWeek = DateUtil.dayOfWeek(date);//4 星期三
//⼀⽉的第⼏天
int dayOfMonth = DateUtil.dayOfMonth(date);//30
//⼀年的第⼏天
int dayOfYear = DateUtil.dayOfYear(date);//181
//⼩时
int hour = DateUtil.hour(date, true);//11
//分钟
int minute = DateUtil.minute(date);//22
//秒
int second = DateUtil.second(date);//33
//毫秒
int millisecond = DateUtil.millisecond(date);//100
9 开始时间和结束时间
//当前秒的开始时间
Date beginOfSecond = DateUtil.beginOfSecond(date);//2021-06-30 11:22:33.000        //当前秒的结束时间
Date endOfSecond = dOfSecond(date);//2021-06-30 11:22:33.999
//当前分钟的开始时间
Date beginOfMinute = DateUtil.beginOfMinute(date);//2021-06-30 11:22:00
//当前分钟的结束时间
Date endOfMinute = dOfMinute(date);//2021-06-30 11:22:59
//当前⼩时的开始时间
Date beginOfHour = DateUtil.beginOfHour(date);//2021-06-30 11:00:00
//当前⼩时的结束时间
Date endOfHour = dOfHour(date);//2021-06-30 11:59:59
//当前天的开始时间
Date beginOfDay = DateUtil.beginOfDay(date);//2021-06-30 00:00:00
//当前天的结束时间
Date endOfDay = dOfDay(date);//2021-06-30 23:59:59
//当前周的开始时间,
Date beginOfWeek = DateUtil.beginOfWeek(date);//2021-06-28 00:00:00 周⼀
//当前周的结束时间
Date endOfWeek = dOfWeek(date);//2021-07-04 23:59:59
//当前⽉的开始时间
Date beginOfMonth = DateUtil.beginOfMonth(date);//2021-06-01 00:00:00
//当前⽉的结束时间
Date endOfMonth = dOfMonth(date);//2021-06-30 23:59:59
//当前季度的开始时间
Date beginOfQuarter = DateUtil.beginOfQuarter(date);//2021-04-01 00:00:00
/
/当前季度的结束时间
Date endOfQuarter = dOfQuarter(date);//2021-06-30 23:59:59
//当前年的开始时间
Date beginOfYear = DateUtil.beginOfYear(date);//2021-01-01 00:00:00
//当前年的结束时间
Date endOfYear = dOfYear(date);//2021-12-31 23:59:59

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。