2021-01-26 获取指定日期所在年/月/周中的第一天、最后一天、某天

整合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;

/**
 * <p>
 *  DateUtil测试类
 * </p>
 *
 * @author: bb
 * @createDate: 2021/1/26
 */
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;

/**
 * <p>
 *  日期工具类
 * </p>
 *
 * @author: bb
 * @createDate: 2021/1/25
 */
public class DateTimeUtil {

    /**
     * <p>
     * 获取指定日期所在周的周几日期(周日至周六 == 1至7)
     * </p>
     *
     * @param date 指定日期
     * @param day  周几
     * @return cn.hutool.core.date.DateTime 日期
     * @author guohaibin
     * @date 2021-01-26 11:17:13
     */
    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());
    }

    /**
     * <p>
     * 获取指定日期所在月中的第几天(0-31)
     * </p>
     *
     * @param date 指定日期
     * @param day  第几天(0~31,0代表该月最后一天)
     * @return cn.hutool.core.date.DateTime 日期
     * @author guohaibin
     * @date 2021-01-26 11:40:34
     */
    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());
    }

    /**
     * <p>
     * 获取指定日期所在年中的第几天(0-366)
     * </p>
     *
     * @param date 指定日期
     * @param day  第几天(0~366,0代表该年最后一天)
     * @return cn.hutool.core.date.DateTime 日期
     * @author guohaibin
     * @date 2021-01-26 11:40:34
     */
    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());
    }

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值