cn.hutool
hutool-all
5.7.14
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import java.util.Date;
/**
* 日期工具类
*/
public class DateUtils {
/**
* 将时间字符串转换成日期类型,当字符串为空时,返回当前时间
* @param str 时间字符串
* @param format (可以转换类型: yyyy-MM-dd HH:mm:ss,yyyy-MM-dd)
* @return java.util.Date
*/
public static Date stringConvertDate(String str, String format) {
if ("yyyy-MM-dd HH:mm:ss".equals(format)) {
return DateUtil.parse(str, "yyyy-MM-dd HH:mm:ss");
}
if ("yyyy-MM-dd".equals(format)) {
return DateUtil.parse(str, "yyyy-MM-dd");
}
return null;
}
/**
* 获取当前时间
* @return java.util.Date
*/
public static Date getNowDate() {
return DateUtil.date();
}
/**
* 获取当前日期字符串
* @param type (type=1时,返回yyyy-MM-dd HH:mm:ss格式。type=2时,返回yyyy-MM-dd格式)
* @return java.lang.String
*/
public static String getNowDateStr(int type) {
String str = "";
if (type == 1) {
//yyyy-MM-dd HH:mm:ss
str = DateUtil.now();
}
if (type == 2) {
//yyyy-MM-dd
str = DateUtil.today();
}
return str;
}
/**
* 获取年份和月份
* @param type (year, month)
* @return int
*/
public static int getYearOrMonthOrDay(String type) {
Date date = DateUtil.date();
if ("year".equals(type)) {
//获得年的部分
return DateUtil.year(date);
}
if ("month".equals(type)) {
//获得月份,从0开始计数
return DateUtil.month(date)+1;
}
return -1;
}
/**
* 给指定的日期增减天
* @param date 日期
* @param number 天数,正则加,负则减
* @return java.lang.String
*/
public static String addDay(Date date, int number) {
DateTime dateTime = DateUtil.offsetDay(date, number);
return DateUtil.formatDateTime(dateTime);
}
/**
* 给指定的日期增减月
* @param date 日期
* @param number 月数,正则加,负则减
* @return java.lang.String
*/
public static String addMonth(Date date, int number) {
DateTime dateTime = DateUtil.offsetMonth(date, number);
return DateUtil.formatDateTime(dateTime);
}
/**
* 给指定的日期增减小时
* @param date 日期
* @param number 小时数,正则加,负则减
* @return java.lang.String
*/
public static String addHour(Date date, int number) {
DateTime dateTime = DateUtil.offsetHour(date, number);
return DateUtil.formatDateTime(dateTime);
}
/**
* 给指定的日期增减分钟
* @param date 日期
* @param number 分钟数,正则加,负则减
* @return java.lang.String
*/
public static String addMinute(Date date, int number) {
DateTime dateTime = DateUtil.offsetMinute(date, number);
return DateUtil.formatDateTime(dateTime);
}
/**
* 给指定的日期增减秒
* @param date 日期
* @param number 秒数,正则加,负则减
*/
public static String addSecond(Date date, int number) {
DateTime dateTime = DateUtil.offsetSecond(date, number);
return DateUtil.formatDateTime(dateTime);
}
/**
* 获取昨天日期(返回日期类型)
* @return java.util.Date
*/
public static Date getYesterdayDate() {
return DateUtil.yesterday();
}
/**
* 获取昨天日期(返回字符串类型)
* @return String
*/
public static String getYesterdayString() {
DateTime yesterday = DateUtil.yesterday();
return DateUtil.formatDateTime(yesterday);
}
/**
* 获取明天日期(返回日期类型)
* @return java.util.Date
*/
public static Date getTomorrowDate() {
return DateUtil.tomorrow();
}
/**
* 获取明天日期(返回字符串类型)
* @return String
*/
public static String getTomorrowString() {
DateTime tomorrow = DateUtil.tomorrow();
return DateUtil.formatDateTime(tomorrow);
}
/**
* 获取上周日期(返回日期类型)
* @return java.util.Date
* @author 小宇宙
* @date 2021/12/11 22:22:08
*/
public static Date getLastWeekDate() {
return DateUtil.lastWeek();
}
/**
* 获取上周日期(返回字符串类型)
* @return String
*/
public static String getLastWeekString() {
DateTime lastWeek = DateUtil.lastWeek();
return DateUtil.formatDateTime(lastWeek);
}
/**
* 获取下周日期(返回日期类型)
* @return java.util.Date
*/
public static Date getNextWeekDate() {
return DateUtil.nextWeek();
}
/**
* 获取下周日期(返回字符串类型)
* @return String
*/
public static String getNextWeekString() {
DateTime nextWeek = DateUtil.nextWeek();
return DateUtil.formatDateTime(nextWeek);
}
/**
* 获取上个月日期(返回日期类型)
* @return java.util.Date
*/
public static Date getLastMonthDate() {
return DateUtil.lastMonth();
}
/**
* 获取上个月日期(返回字符串类型)
* @return String
*/
public static String getLastMonthString() {
DateTime lastMonth = DateUtil.lastMonth();
return DateUtil.formatDateTime(lastMonth);
}
/**
* 获取下个月日期(返回日期类型)
* @return java.util.Date
*/
public static Date getNextMonthDate() {
return DateUtil.nextMonth();
}
/**
* 获取下个月日期(返回字符串类型)
* @return String
*/
public static String getNextMonthString() {
DateTime nextMonth = DateUtil.nextMonth();
return DateUtil.formatDateTime(nextMonth);
}
/**
* 获取两个日期之间相差的天数
* @param date1 开始时间
* @param date2 结束时间
* @return long
*/
public static long getDateBetweenByDay(Date date1, Date date2) {
return DateUtil.between(date1, date2, DateUnit.DAY);
}
/**
* 获取两个日期之间相差的小时数
* @param date1 开始时间
* @param date2 结束时间
* @return long
*/
public static long getDateBetweenByHour(Date date1, Date date2) {
return DateUtil.between(date1, date2, DateUnit.HOUR);
}
/**
* 获取两个日期之间相差的分钟数
* @param date1 开始时间
* @param date2 结束时间
* @return long
*/
public static long getDateBetweenByMinute(Date date1, Date date2) {
return DateUtil.between(date1, date2, DateUnit.MINUTE);
}
/**
* 获取两个日期之间相差的秒数
* @param date1 开始时间
* @param date2 结束时间
* @return long
*/
public static long getDateBetweenBySecond(Date date1, Date date2) {
return DateUtil.between(date1, date2, DateUnit.SECOND);
}
/**
* 获取两个日期之间相差的周数
* @param date1 开始时间
* @param date2 结束时间
* @return long
*/
public static long getDateBetweenByWeek(Date date1, Date date2) {
return DateUtil.between(date1, date2, DateUnit.WEEK);
}
/**
* 获取开始时间和结束时间之间相差的时间
* @param beginDate 开始时间
* @param endDate 结束时间
* @return java.lang.String
*/
public static String getDateBetweenMsg(Date beginDate, Date endDate) {
return DateUtil.formatBetween(beginDate, endDate);
}
/**
* 根据出生日期获取年龄
* @param birthDay 出生日期
* @return int
*/
public static int getAge(String birthDay) {
return DateUtil.ageOfNow(birthDay);
}
}
@Test
void testDateUtils() {
String str = "2022-04-29";
Date date = DateUtils.stringConvertDate(str, "yyyy-MM-dd");
System.out.println(date);
Date nowDate = DateUtils.getNowDate();
System.out.println("获取当前日期(Date类型):" + nowDate);
//获取当前日期(String类型),格式:yyyy-MM-dd
String nowDateStr = DateUtils.getNowDateStr(2);
System.out.println("获取当前日期(字符串类型): " + nowDateStr);
//获取当前日期(String类型),格式:yyyy-MM-dd HH:mm:ss
String nowDateStr1 = DateUtils.getNowDateStr(1);
System.out.println("获取当前日期(字符串类型): " + nowDateStr1);
int month = DateUtils.getYearOrMonthOrDay("month");
System.out.println("获取当前时间月份:" + month);
//date = "2022-04-29";
System.out.println("给指定时间加天数:"+DateUtils.addDay(date, 2));
System.out.println("给指定时间加月数:"+DateUtils.addMonth(date, 2));
System.out.println("给指定时间加小时数:"+DateUtils.addHour(date, 2));
System.out.println("给指定时间加分钟数:"+DateUtils.addMinute(date, 2));
System.out.println("给指定时间加秒数:"+DateUtils.addSecond(date, 2));
System.err.println("昨天(返回日期类型):"+DateUtils.getYesterdayDate());
System.err.println("昨天(返回字符串类型):"+DateUtils.getYesterdayString());
System.err.println("明天(返回日期类型):"+DateUtils.getTomorrowDate());
System.err.println("明天(返回字符串类型):"+DateUtils.getTomorrowString());
System.err.println("上周(返回日期类型):"+DateUtils.getLastWeekDate());
System.err.println("上周(返回字符串类型):"+DateUtils.getLastWeekString());
System.err.println("下周(返回日期类型):"+DateUtils.getNextWeekDate());
System.err.println("下周(返回字符串类型):"+DateUtils.getNextWeekString());
System.err.println("上个月(返回日期类型):"+DateUtils.getLastMonthDate());
System.err.println("上个月(返回字符串类型):"+DateUtils.getLastMonthString());
System.err.println("下个月(返回日期类型):"+DateUtils.getNextMonthDate());
System.err.println("下个月(返回字符串类型):"+DateUtils.getNextMonthString());
String dateStr1 = "2017-04-12 00:33:00";
Date date1 = DateUtil.parse(dateStr1);
String dateStr2 = "2017-04-23 23:33:23";
Date date2 = DateUtil.parse(dateStr2);
System.out.println("相差的天数:"+DateUtils.getDateBetweenByDay(date1, date2));
System.out.println("相差的小时数:"+DateUtils.getDateBetweenByHour(date1, date2));
System.out.println("相差的分钟数:"+DateUtils.getDateBetweenByMinute(date1, date2));
System.out.println("相差的秒数:"+DateUtils.getDateBetweenBySecond(date1, date2));
System.out.println("相差的周数:"+DateUtils.getDateBetweenByWeek(date1, date2));
System.out.println("相差的时间:"+DateUtils.getDateBetweenMsg(date1, date2));
System.out.println("根据年月日获取年龄:"+DateUtils.getAge("1996-06-28"));
}