Java时间工具类

方法说明:

  • 获取某一天的开始时间:getDayStartTime(Date date)
  • 获取指定某一天的结束时间:getDayEndTime(Date date)
  • 获取月开始时间:getMonthStartTime(Date date)
  • 获取月的结束时间:getMonthEndTime(Date date)
  • 获取年开始的时间:getYearStartTime(Date date)
  • 获取年的最后时间:getYearEndTime(Date date)
  • 时间戳转字符串:timestampToStr(long timestamp, String zoneId)
  • Date时间类型转字符串:dateToStr(Date date)
  • 判断是否为同一天:isSameDate(Date listTime, Date presentTime)
  • 判断两个时间相差是否在 monthDifferenceNum 月内:isWithinFewMonth(Date start, Date end,int monthDifferenceNum)
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;

/**
 * 时间工具类
 * @author : Xiewy <br/>
 * @date : 2022/1/11 15:39 <br/>
 */
public class DateUtil {

    /**
     * 获取某一天的开始时间
     *
     * @param date 时间
     * @return date这一天开始的时间
     */
    public static Date getDayStartTime(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }

    /**
     * 获取某一天的结束时间
     *
     * @param date 时间
     * @return date这一天结束的时间
     */
    public static Date getDayEndTime(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        return calendar.getTime();
    }

    /**
     * 获取月开始时间
     *
     * @param date 时间
     * @return 当月开始的时间
     */
    public static Date getMonthStartTime(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.YEAR, 0);
        calendar.add(Calendar.MONTH, 0);
        // 设置为1号,当前日期既为本月第一天
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        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();
    }

    /**
     * 获取月的结束时间
     *
     * @param date 时间
     * @return 当月结束的最后时间
     */
    public static Date getMonthEndTime(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.YEAR, 0);
        calendar.add(Calendar.MONTH, 0);
        // 获取当前月最后一天
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        return calendar.getTime();
    }

    /**
     * 获取年开始的时间
     *
     * @param date 时间
     * @return date时间所在年开始的时间
     */
    public static Date getYearStartTime(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.YEAR, 0);
        calendar.add(Calendar.DATE, 0);
        calendar.add(Calendar.MONTH, 0);
        calendar.set(Calendar.DAY_OF_YEAR, 1);
        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();
    }

    /**
     * 获取年的最后时间
     *
     * @param date 时间
     * @return date时间所在年开始的时间
     */
    public static Date getYearEndTime(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int year = calendar.get(Calendar.YEAR);
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        calendar.roll(Calendar.DAY_OF_YEAR, -1);
        return calendar.getTime();
    }

    /**
     * 时间戳转字符串
     *
     * @param timestamp 毫秒级时间戳
     * @param zoneId    如 GMT+8或UTC+08:00
     * @return 字符串类型的时间 例如: 2022-12-31 23:59:59
     */
    public static String timestampToStr(long timestamp, String zoneId) {
        ZoneId timezone = ZoneId.of(zoneId);
        LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), timezone);
        return localDateTime.toString();
    }

    /**
     * Date时间类型转字符串
     *
     * @param date 时间
     * @return 字符串类型 yyyy-MM-dd HH:mm:ss
     */
    public static String dateToStr(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(date);
    }

    /**
     * 判断是否为同一天
     * @param listTime 时间1
     * @param presentTime 时间2
     * @return true-同一天  false-不是同一天
     */
    private static boolean isSameDate(Date listTime, Date presentTime) {
        //实例化
        Calendar calList = Calendar.getInstance();
        calList.setTime(listTime);
        Calendar calPresent = Calendar.getInstance();
        calPresent.setTime(presentTime);
        //判断 年
        boolean isSameYear = calList.get(Calendar.YEAR) == calPresent.get(Calendar.YEAR);
        //判断 年,月
        boolean isSameMonth = isSameYear && calList.get(Calendar.MONTH) == calPresent.get(Calendar.MONTH);
        //判断 年,月,日
        boolean isSameDate = isSameMonth && calList.get(Calendar.DAY_OF_MONTH) == calPresent.get(Calendar.DAY_OF_MONTH);
        //true-同一天  false-不是同一天
        return isSameDate;
    }



    /**
     * 计算两个时间相差是否在 monthDifferenceNum 个月内
     *
     * @param start 开始时间
     * @param end   结束时间
     * @param monthDifferenceNum 相差月数
     * @return 对比结果true是在 monthDifferenceNum 个月内,false为不在 monthDifferenceNum 个月内
     */
    public static Boolean isWithinFewMonth(Date start, Date end,int monthDifferenceNum) {
        if (start.after(end)) {
            Date t = start;
            start = end;
            end = t;
        }
        Calendar c1 = Calendar.getInstance();
        Calendar c2 = Calendar.getInstance();
        c1.setTime(start);
        c2.setTime(end);
        c1.add(Calendar.MONTH, monthDifferenceNum);
        if (c1.getTimeInMillis() <= c2.getTimeInMillis()) {
            return Boolean.FALSE;
        }
        return Boolean.TRUE;
    }
}

原创:翎野君

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值