日期操作工具类

import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import lombok.extern.slf4j.Slf4j;

import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.Calendar;
import java.util.Date;


@Slf4j
public class TimeUtil {

    public static String format(Date date, String pattern) {
        return new DateTime(date).toString(pattern);
    }

    /**
     * 转换时间对象
     *
     * @param dateStr  时间字符串
     * @param pattern: 时间格式
     * @return: java.util.Date
     */
    public static Date parse(String dateStr, String pattern) {
        return DateUtil.parse(dateStr, pattern).toSqlDate();
    }


    /**
     * 根据时间计算和今天相差时长(天数)
     *
     * @param targetDate 目标时间
     * @return 返回相差时长字符串
     */
    public static Long getDaysFromToday(Date targetDate) {
        Assert.notNull(targetDate, "日期不能为空");
        long dayCount = DateUtil.betweenDay(targetDate, new Date(), false);
        //0天显示1天
        if (dayCount == 0L) {
            dayCount = 1L;
        }

        return dayCount;
    }


    /**
     * 计算日期和今天相差月数
     *
     * @param targetDate 目标日期
     * @return 相差时长
     */
    public static Long getMonthsFromToday(Date targetDate) {
        Assert.notNull(targetDate, "日期不能为空");
        long totalMonthCount = DateUtil.betweenMonth(targetDate, new Date(), false);
        long monthCount = totalMonthCount % 12;
        if (monthCount > 0) {
            return monthCount;
        }
        return 0L;
    }


    /**
     * 获取当前时间之后的minute分钟时间
     *
     * @param minute minute分钟
     * @return minute分钟之后的时间
     */
    public static Date timeAfterMinute(Date date, int minute) {
        SimpleDateFormat sdf = new SimpleDateFormat();
        sdf.applyPattern(DateFormatConstant.C_YYYY_MM_DD_HH_MM_SS);

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MINUTE, minute);

        return calendar.getTime();
    }


    /**
     * 调整日期,并且设置为日期的0时0分0秒
     *
     * @param date
     * @param offSet
     * @return
     */
    public static Date addDayAndSetFirstSecond(Date date, int offSet) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DATE, offSet);
        // 时
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        // 分
        calendar.set(Calendar.MINUTE, 0);
        // 秒
        calendar.set(Calendar.SECOND, 0);
        // 毫秒
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }


    public static Date parseDate(String d, String pattern) {
        try {
            return DateUtil.parse(d, pattern).toJdkDate();
        } catch (Exception e) {
            log.warn("时间解析异常:{}", e);
            throw new CsrBizException("时间解析异常");
        }
    }

    public static Date getCurrentDate(String pattern) {
        DateTime now = new DateTime();
        return parseDate(now.toString(pattern), pattern);
    }


    /**
     * 获取指定日期所属季度的开始时间
     *
     * @param date 指定日期
     * @return 季度开始时间
     */
    public static Date beginOfQuarter(Date date) {
        DateTime beginOfQuarter = DateUtil.beginOfQuarter(date);
        return TimeUtil.parse(beginOfQuarter.toString(), DateFormatConstant.C_YYYY_MM_DD);
    }

    /**
     * 获取指定日期所属季度的结束时间
     *
     * @param date 指定日期
     * @return 季度结束时间
     */
    public static Date endOfQuarter(Date date) {
        DateTime endOfQuarter = DateUtil.endOfQuarter(date);
        return TimeUtil.parse(endOfQuarter.toString(), DateFormatConstant.C_YYYY_MM_DD);
    }


    /**
     * 获取默认日期
     *
     * @return 默认日期
     */
    public static Date getInitDate() {
        String beginTime = "1970-01-01";
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date initDate = new Date();
        try {
            initDate = format.parse(beginTime);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return initDate;
    }


    /**
     * 获取今天的日期
     *
     * @return 今天的日期
     */
    public static Date getTodayDate() {
        LocalDate today = LocalDate.now();
        return TimeUtil.parse(today.toString(), DateFormatConstant.C_YYYY_MM_DD);
    }


    /**
     * 获取明天的日期
     *
     * @return 明天的日期
     */
    public static Date getTomorrowDate() {
        LocalDate today = LocalDate.now().plusDays(1);
        return TimeUtil.parse(today.toString(), DateFormatConstant.C_YYYY_MM_DD);
    }


    /**
     * 获取指定日期的星期名称
     *
     * @param date 指定日期
     * @return 星期名称
     */
    public static String dayOfWeekEnum(Date date) {
        String weekName = DateUtil.dayOfWeekEnum(date).toChinese();
        return weekName;
    }

    /**
     * 获取默认日期
     *
     * @return 默认日期
     */
    public static Date getDefaultDate() {
        String beginTime = "1900-01-01";
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date initDate = new Date();
        try {
            initDate = format.parse(beginTime);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return initDate;
    }

    /**
     * 比较2个日期时分秒的大小
     *
     * @param first
     * @param second
     * @return
     */
    public static int compareHms(Date first, Date second) {
        SimpleDateFormat format = new SimpleDateFormat(DateFormatConstant.HH_MM_SS);
        return format.format(first).compareTo(format.format(second));
    }

    /**
     * 判断两个日期相差的毫秒数
     *
     * @param beginDate 起始日期
     * @param endDate   结束日期
     * @return 日期差
     * @since 3.0.1
     */
    public static long betweenMs(Date beginDate, Date endDate) {
        return DateUtil.betweenMs(beginDate, endDate);
    }

    /**
     * 获取某天的结束时间
     *
     * @param date 日期
     * @return {@link DateTime}
     */
    public static DateTime endOfDay(Date date) {
        return DateUtil.endOfDay(date);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值