整合hutool
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.0</version>
</dependency>
测试
package cn.mb.test;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.Week;
import cn.mb.util.DateTimeUtil;
public class DateUtilTest {
public static void main(String[] args) {
DateTime today = DateUtil.date();
DateTime yesterday1 = DateUtil.yesterday();
DateTime yesterday2 = DateUtil.offsetDay(today, -1);
System.out.println("昨天:" + yesterday1 + ", " + yesterday2);
DateTime tomorrow1 = DateUtil.tomorrow();
DateTime tomorrow2 = DateUtil.offsetDay(today, 1);
System.out.println("明天:" + tomorrow1 + ", " + tomorrow2);
DateTime lastWeekToday1 = DateUtil.lastWeek();
DateTime lastWeekToday2 = DateUtil.offsetWeek(today, -1);
System.out.println("上周今天:" + lastWeekToday1 + ", " + lastWeekToday2);
DateTime lastMonthToday1 = DateUtil.lastMonth();
DateTime lastMonthToday2 = DateUtil.offsetMonth(today, -1);
System.out.println("上月今天:" + lastMonthToday1 + ", " + lastMonthToday2);
DateTime beginOfYear = DateUtil.beginOfYear(today);
System.out.println("年第一天:" + beginOfYear);
DateTime endOfYear = DateUtil.endOfYear(today);
System.out.println("年最后一天:" + endOfYear);
DateTime beginOfMonth = DateUtil.beginOfMonth(today);
System.out.println("月第一天:" + beginOfMonth);
DateTime endOfMonth = DateUtil.endOfMonth(today);
System.out.println("月最后一天:" + endOfMonth);
DateTime beginOfWeek = DateUtil.beginOfWeek(today);
System.out.println("周第一天:" + beginOfWeek);
DateTime endOfWeek = DateUtil.endOfWeek(today);
System.out.println("周最后一天:" + endOfWeek);
DateTime dayOfWeek = DateTimeUtil.getDayOfWeek(today, Week.FRIDAY);
System.out.println("周某天:" + dayOfWeek);
DateTime dayOfMonth = DateTimeUtil.getDayOfMonth(today, 15);
System.out.println("月某天:" + dayOfMonth);
DateTime dayOfYear = DateTimeUtil.getDayOfYear(today, 150);
System.out.println("年某天:" + dayOfYear);
long 天数差 = DateUtil.between(DateUtil.yesterday(), DateUtil.tomorrow(), DateUnit.DAY);
System.out.println("天数差:" + 天数差);
long 小时差 = DateUtil.between(DateUtil.yesterday(), DateUtil.tomorrow(), DateUnit.HOUR);
System.out.println("小时差:" + 小时差);
boolean isLeapYear = DateUtil.isLeapYear(2021);
System.out.println("2021是否为闰年:" + isLeapYear);
}
}
DateTimeUtil
package cn.mb.util;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.Month;
import cn.hutool.core.date.Week;
import cn.hutool.core.util.ObjectUtil;
public class DateTimeUtil {
public static DateTime getDayOfWeek(DateTime date, Week day) {
if (ObjectUtil.isNull(date) || ObjectUtil.isNull(day))
throw new IllegalArgumentException("date or day is null");
Week dateWeek = date.dayOfWeekEnum();
if (dateWeek == day) return date;
if (day == Week.MONDAY) return DateUtil.beginOfWeek(date);
if (day == Week.SUNDAY) return DateUtil.endOfWeek(date);
return DateUtil.offsetDay(date, day.getValue() - dateWeek.getValue());
}
public static DateTime getDayOfMonth(DateTime date, int day) {
if (ObjectUtil.isNull(date))
throw new IllegalArgumentException("date is null");
if (day < 0 || day > 31)
throw new IllegalArgumentException("day is between 0 and 31");
Month month = date.monthEnum();
int totalDayOfMonth = month.getLastDay(date.isLeapYear());
if (day > totalDayOfMonth) {
throw new IllegalArgumentException(totalDayOfMonth + " days at most in " + month);
}
if (date.dayOfMonth() == day) return date;
if (day == 0) return DateUtil.endOfMonth(date);
if (day == 1) return DateUtil.beginOfMonth(date);
return DateUtil.offsetDay(date, day - date.dayOfMonth());
}
public static DateTime getDayOfYear(DateTime date, int day) {
if (ObjectUtil.isNull(date))
throw new IllegalArgumentException("date is null");
if (day < 0 || day > 366)
throw new IllegalArgumentException("day is between 0 and 366");
int lengthOfYear = DateUtil.lengthOfYear(date.year());
if (day > lengthOfYear) {
throw new IllegalArgumentException(lengthOfYear + " days at most in " + date.year());
}
if (day == 1) return DateUtil.beginOfYear(date);
if (day == 0) return DateUtil.endOfYear(date);
return DateUtil.offsetDay(date, day - date.dayOfYear());
}
}