dateUtils工具类整合。


import org.springframework.util.ObjectUtils;

import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @Description: 时间工具类
 */
public class DateUtils {


    public final static String dateFormatStr = "yyyy-MM-dd";

    public final static String timeFormatStr = "yyyy-MM-dd HH:mm:ss";

    public final static String nowtimeStr = "yyyyMMddHHmmss";

    public final static String dateFormat1Str = "yyyyMMdd";


    /**
     * 格式化日期
     *
     * @param date
     * @return
     */
    public static String fomatDate(Date date) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormatStr);
        try {
            return simpleDateFormat.format(date);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 格式化日期
     *
     * @param date
     * @return
     */
    public static String fomatDate(Date date, String pattern) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
        try {
            return simpleDateFormat.format(date);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 格式化日期
     *
     * @param date
     * @return
     */
    public static String fomatDate(LocalDateTime date, String pattern) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
        try {
            return simpleDateFormat.format(asDate(date));
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 格式化日期
     *
     * @param date
     * @return
     */
    public static String fomatDate(LocalDate date, String pattern) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
        try {
            return simpleDateFormat.format(asDate(date));
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 获取月份第一天起始时间
     *
     * @return
     */
    public static LocalDateTime cleanDate(Date date) {
        if (date == null) {
            throw new IllegalArgumentException("The date must not be null");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        //将小时至0
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        //将分钟至0
        calendar.set(Calendar.MINUTE, 0);
        //将秒至0
        calendar.set(Calendar.SECOND, 0);
        //将毫秒至0
        calendar.set(Calendar.MILLISECOND, 0);
        LocalDateTime ldt = Instant.ofEpochMilli(calendar.getTime().getTime())
                .atZone(ZoneId.systemDefault())
                .toLocalDateTime();
        return ldt;
    }

    /**
     * 指定时间年份第一天
     *
     * @return
     */
    public static LocalDateTime getFirstDayDateOfYear(final LocalDateTime date) {
        return getFirstDayDateOfYear(asDate(date));
    }

    /**
     * 指定时间年份第一天
     *
     * @param date
     * @return
     */
    public static LocalDateTime getFirstDayDateOfYear(final Date date) {
        final Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        final int last = cal.getActualMinimum(Calendar.DAY_OF_YEAR);
        cal.set(Calendar.DAY_OF_YEAR, last);
        return asLocalDateTime(cal.getTime());
    }

    /**
     * 指定时间年份最后一天
     *
     * @param date
     * @return
     */
    public static LocalDateTime getLastDayOfYear(final Date date) {
        final Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        final int last = cal.getActualMaximum(Calendar.DAY_OF_YEAR);
        cal.set(Calendar.DAY_OF_YEAR, last);
        return asLocalDateTime(cal.getTime());
    }

    /**
     * 获取当年的开始时间戳
     *
     * @param timeStamp 毫秒级时间戳
     * @param timeZone  如 GMT+8:00
     * @return
     */
    public static Long getYearStartTime(Long timeStamp, String timeZone) {
        Calendar calendar = Calendar.getInstance();// 获取当前日期
        calendar.setTimeZone(TimeZone.getTimeZone(timeZone));
        calendar.setTimeInMillis(timeStamp);
        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.getTimeInMillis();
    }

    /**
     * 获取当年的最后时间戳
     *
     * @param timeStamp 毫秒级时间戳
     * @param timeZone  如 GMT+8:00
     * @return
     */
    public static Long getYearEndTime(Long timeStamp, String timeZone) {
        Calendar calendar = Calendar.getInstance();// 获取当前日期
        calendar.setTimeZone(TimeZone.getTimeZone(timeZone));
        calendar.setTimeInMillis(timeStamp);
        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.getTimeInMillis();
    }

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


    /**
     * 获取月份第一天起始时间
     *
     * @return
     */
    public static LocalDateTime firstDayOfMonth(Date date) {
        if (date == null) {
            throw new IllegalArgumentException("The date must not be null");
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
        //将小时至0
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        //将分钟至0
        calendar.set(Calendar.MINUTE, 0);
        //将秒至0
        calendar.set(Calendar.SECOND, 0);
        //将毫秒至0
        calendar.set(Calendar.MILLISECOND, 0);
        LocalDateTime ldt = Instant.ofEpochMilli(calendar.getTime().getTime())
                .atZone(ZoneId.systemDefault())
                .toLocalDateTime();
        return ldt;
    }


    /**
     * 判断两个日期是否是同一个月
     *
     * @param date1
     * @param date2
     * @return
     */
    public static Boolean sameMonth(LocalDate date1, LocalDate date2) {
        if (ObjectUtils.isEmpty(date1) || ObjectUtils.isEmpty(date2)) {
            return Boolean.FALSE;
        }
        if (date1.getYear() != date2.getYear()) {
            return Boolean.FALSE;
        }
        return date1.getMonthValue() == date2.getMonthValue();
    }

    /**
     * 本周周一
     *
     * @param date
     * @return
     */
    public static LocalDate mondayOfWeek(LocalDate date) {
        return date.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
    }

    /**
     * 本周周日
     *
     * @param date
     * @return
     */
    public static LocalDate sundayOfWeek(LocalDate date) {
        return date.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
    }

    public static void main(String[] args) {
        System.out.println(DateUtils.fomatDate(getFirstDayDateOfYear(LocalDateTime.now()), dateFormat1Str));
    }

    /**
     * 上周周一
     *
     * @param date
     * @return
     */
    public static LocalDate mondayOfLastWeek(LocalDate date) {
        LocalDate todayOfLastWeek = date.minusDays(7);
        return todayOfLastWeek.with(TemporalAdjusters.previous(DayOfWeek.SUNDAY)).plusDays(1);
    }

    /**
     * 上周周日
     *
     * @param date
     * @return
     */
    public static LocalDate sundayOfLastWeek(LocalDate date) {
        LocalDate todayOfLastWeek = date.minusDays(7);
        return todayOfLastWeek.with(TemporalAdjusters.next(DayOfWeek.MONDAY)).minusDays(1);
    }

    /**
     * 获取月份最后一天结束时间
     *
     * @return
     */
    public static LocalDateTime lastDayOfMonth(Date date) {
        if (date == null) {
            throw new IllegalArgumentException("The date must not be null");
        } else {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
            //将小时至0
            calendar.set(Calendar.HOUR_OF_DAY, 23);
            //将分钟至0
            calendar.set(Calendar.MINUTE, 59);
            //将秒至0
            calendar.set(Calendar.SECOND, 59);
            //将毫秒至0
            calendar.set(Calendar.MILLISECOND, 999);
            LocalDateTime ldt = Instant.ofEpochMilli(calendar.getTime().getTime())
                    .atZone(ZoneId.systemDefault())
                    .toLocalDateTime();
            return ldt;
        }
    }


    /**
     * 获取月份第一天此刻的时间
     *
     * @return
     */
    public static Date addMonth(Date date, int amount) {
        if (date == null) {
            throw new IllegalArgumentException("The date must not be null");
        } else {
            Calendar c = Calendar.getInstance();
            c.setTime(date);
            c.add(2, amount);
            return c.getTime();
        }
    }

    /**
     * 月份添加
     *
     * @param date
     * @param amount
     * @return
     */
    public static LocalDate addMonth(LocalDate date, int amount) {
        if (date == null) {
            throw new IllegalArgumentException("The date must not be null");
        } else {
            Calendar c = Calendar.getInstance();
            c.setTime(asDate(date));
            c.add(2, amount);
            return asLocalDate(c.getTime());
        }
    }

    /**
     * 获取月份第一天此刻的时间
     *
     * @return
     */
    public static Date addDays(Date date, int amount) {
        if (date == null) {
            throw new IllegalArgumentException("The date must not be null");
        }
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.DATE, amount);
        return c.getTime();
    }

    public static LocalDateTime addDays(LocalDateTime date, int amount) {
        if (date == null) {
            throw new IllegalArgumentException("The date must not be null");
        }
        Calendar c = Calendar.getInstance();
        c.setTime(asDate(date));
        c.add(Calendar.DATE, amount);
        return asLocalDateTime(c.getTime());
    }

    /***
     * 添加日期
     *
     * @param date
     * @param amount
     * @return
     */
    public static LocalDate addDays(LocalDate date, int amount) {
        if (date == null) {
            throw new IllegalArgumentException("The date must not be null");
        }
        Calendar c = Calendar.getInstance();
        c.setTime(asDate(date));
        c.add(Calendar.DATE, amount);
        return asLocalDate(c.getTime());
    }


    /**
     * 转date
     *
     * @param localDateTime
     * @return
     */
    public static Date asDate(LocalDateTime localDateTime) {
        if (localDateTime == null) {
            return null;
        }
        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
    }

    /**
     * 转date
     *
     * @param localDate
     * @return
     */
    public static Date asDate(LocalDate localDate) {
        if (null == localDate) {
            return null;
        }
        ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault());
        return Date.from(zonedDateTime.toInstant());
    }

    /**
     * 转LocalDateTime
     *
     * @param date
     * @return
     */
    public static LocalDateTime asLocalDateTime(Date date) {
        return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
    }

    /**
     * 转LocalDateTime
     *
     * @param date
     * @return
     */
    public static LocalDate asLocalDate(Date date) {
        return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();
    }

    /**
     * 转LocalDateTime
     *
     * @param localDateTime
     * @return
     */
    public static LocalDate asLocalDates(LocalDateTime localDateTime) {
        Date date = asDate(localDateTime);
        return asLocalDate(date);
    }

    /**
     * YYYY-MM-DD转日期
     *
     * @param date
     * @return
     */
    public static LocalDate asLocalDate(String date) {
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern(dateFormatStr);
        return LocalDate.parse(date, fmt);
    }

    /**
     * YYYYMMDD转日期
     *
     * @param date
     * @return
     */
    public static LocalDate asLocalDates(String date) {
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern(dateFormat1Str);
        return LocalDate.parse(date, fmt);
    }

    /**
     * 格式化
     *
     * @param date
     * @return
     */
    public static LocalDateTime asLocalDateTime(String date) {
        if (date.trim().length() <= 10) {//只有年月日不包含时分秒
            date = date + " 00:00:00";
        }
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern(timeFormatStr);
        return LocalDateTime.parse(date, fmt);
    }

    public static String dateStart(String date) {
        LocalDate dateTmp = asLocalDate(date);
        return fomatDate(asDate(dateTmp), timeFormatStr);
    }

    /**
     * 开始时间
     *
     * @param date
     * @return
     */
    public static String dateStart(LocalDate date) {
        return fomatDate(asDate(date), timeFormatStr);
    }

    public static String dateStart(LocalDateTime date) {
        return fomatDate(asDate(date), timeFormatStr);
    }


    public static String dateEnd(String date) {
        String format = "^\\d{4}(\\-)\\d{1,2}\\1\\d{1,2}$";
        Pattern pattern = Pattern.compile(format);
        Matcher matcher = pattern.matcher(date);
        LocalDate dateTmp;
        if (matcher.matches()) {//不包含时分秒
            dateTmp = asLocalDate(date);
        } else {
            dateTmp = asLocalDateTime(date).toLocalDate();
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(asDate(dateTmp));
        //将小时至0
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        //将分钟至0
        calendar.set(Calendar.MINUTE, 59);
        //将秒至0
        calendar.set(Calendar.SECOND, 59);
        //将毫秒至0
        calendar.set(Calendar.MILLISECOND, 999);
        LocalDateTime ldt = Instant.ofEpochMilli(calendar.getTime().getTime())
                .atZone(ZoneId.systemDefault())
                .toLocalDateTime();
        return fomatDate(asDate(ldt), timeFormatStr);
    }


    /**
     * 结束时间
     *
     * @param date
     * @return
     */
    public static String dateEnd(LocalDate date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(asDate(date));
        //将小时至0
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        //将分钟至0
        calendar.set(Calendar.MINUTE, 59);
        //将秒至0
        calendar.set(Calendar.SECOND, 59);
        //将毫秒至0
        calendar.set(Calendar.MILLISECOND, 999);
        LocalDateTime ldt = Instant.ofEpochMilli(calendar.getTime().getTime())
                .atZone(ZoneId.systemDefault())
                .toLocalDateTime();
        return fomatDate(asDate(ldt), timeFormatStr);
    }

    /**
     * 结束时间
     *
     * @param date
     * @return
     */
    public static String dateEnd(LocalDateTime date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(asDate(date));
        //将小时至0
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        //将分钟至0
        calendar.set(Calendar.MINUTE, 59);
        //将秒至0
        calendar.set(Calendar.SECOND, 59);
        //将毫秒至0
        calendar.set(Calendar.MILLISECOND, 999);
        LocalDateTime ldt = Instant.ofEpochMilli(calendar.getTime().getTime())
                .atZone(ZoneId.systemDefault())
                .toLocalDateTime();
        return fomatDate(asDate(ldt), timeFormatStr);
    }


    /**
     * 判断时间区间
     *
     * @param compareTime
     * @param beginTime
     * @param endTime
     * @return
     */
    public static Boolean betweenTime(LocalDateTime compareTime, LocalDateTime beginTime, LocalDateTime endTime) {
        if (ObjectUtils.isEmpty(beginTime) || ObjectUtils.isEmpty(endTime)) {
            return Boolean.FALSE;
        }
        if (compareTime.isBefore(beginTime)) {
            return Boolean.FALSE;
        }
        if (compareTime.isAfter(endTime)) {
            return Boolean.FALSE;
        }
        return Boolean.TRUE;
    }


    //获取当天的开始时间
    public static java.util.Date getDayBegin() {
        Calendar cal = new GregorianCalendar();
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }

    //获取当天的结束时间
    public static java.util.Date getDayEnd() {
        Calendar cal = new GregorianCalendar();
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        return cal.getTime();
    }

    /**
     * 日期差值
     *
     * @param beginTime
     * @param endTime
     * @return
     */
    public static Long dateDiff(String beginTime, String endTime) {
        LocalDate start = asLocalDate(beginTime);
        LocalDate end = asLocalDate(endTime);
        return Duration.between(start, end).toDays();
    }

    /**
     * 日期差值
     *
     * @param beginTime
     * @param endTime
     * @return
     */
    public static Long dateDiff(LocalDateTime beginTime, LocalDateTime endTime) {
        return Duration.between(beginTime, endTime).toDays();
    }

    /**
     * 秒时间差
     *
     * @param beginTime
     * @param endTime
     * @return
     */
    public static Long dateSecondDiff(LocalDateTime beginTime, LocalDateTime endTime) {
        return Duration.between(beginTime, endTime).toMillis() / 1000;
    }

    /**
     * 日期差值
     *
     * @param beginTime
     * @param endTime
     * @return
     */
    public static Long dateDiff(LocalDate beginTime, LocalDate endTime) {
        return Duration.between(beginTime, endTime).toDays();
    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值