【java 日期工具类】

java 日期工具类

package com.nearfartec.travel.order.utils;

import cn.hutool.json.JSONUtil;
import com.nearfartec.framework.web.utils.StringUtils;
import org.apache.commons.lang3.time.DateUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 日期工具类
 * <p>ClassName:DateUtil</p>
 * <p>Description: 日期工具类  </p>
 *
 * @author XiangBo
 * @date 2021-12-21 9:31
 */
public class DateUtil extends DateUtils {

    public final static String YYYY = "yyyy";

    public final static String YYYY_MM = "yyyy-MM";

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

    public final static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";

    public final static String HHMMSS = "HHmmss";

    public final static String HH_MM = "HH:mm";

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

    private static final String[] PARSE_PATTERNS = {
            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
            "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
            "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};

    /**
     * 获得指定日期的前一天
     *
     * @param specifiedDay 指定日期
     * @return 日期
     */
    public static String getSpecifiedDayBefore(final String specifiedDay) {
//SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        final Calendar c = Calendar.getInstance();
        String result = null;
        if (StringUtils.isNotBlank(specifiedDay)) {
            Date date = null;
            try {
                date = new SimpleDateFormat("yyyy-MM-dd").parse(specifiedDay);
            } catch (final ParseException e) {
                e.printStackTrace();
            }
            assert date != null;
            c.setTime(date);
            final int day = c.get(Calendar.DATE);
            c.set(Calendar.DATE, day - 1);
            result = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
        }
        return result;
    }

    /**
     * 获得指定日期的后一天
     *
     * @param specifiedDay 指定日期
     * @return 结果
     */

    public static String getSpecifiedDayAfter(final String specifiedDay) {
        final Calendar c = Calendar.getInstance();
        String result = null;
        if (StringUtils.isNotBlank(specifiedDay)) {
            Date date = null;
            try {
                date = new SimpleDateFormat("yyyy-MM-dd").parse(specifiedDay);
            } catch (final ParseException e) {
                e.printStackTrace();
            }
            assert date != null;
            c.setTime(date);
            final int day = c.get(Calendar.DATE);
            c.set(Calendar.DATE, day + 1);
            result = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
        }
        return result;

    }

    /**
     * 获得指定日期的后一天
     *
     * @param specifiedDay 指定日期
     * @return 结果
     */

    public static Date getSpecifiedDayAfter(final Date specifiedDay) {
        final Calendar c = Calendar.getInstance();
        Date result = null;
        if (Objects.nonNull(specifiedDay)) {
            c.setTime(specifiedDay);
            final int day = c.get(Calendar.DATE);
            c.set(Calendar.DATE, day + 1);
            result = c.getTime();
        }
        return result;

    }

    /**
     * 输入开始时间和结束时间,输出两个日期中间的每一天
     *
     * @param startDateStr 开始时间
     * @param endDateStr   结束时间
     * @return 相差时间list
     */
    public static List<String> getBetweenDateList(final String startDateStr, final String endDateStr) {
        //结果集
        final List<String> dateList = new ArrayList<>();
        if (StringUtils.isNotBlank(startDateStr) && StringUtils.isNotBlank(endDateStr)) {
            //格式化格式
            final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DateUtil.YYYY_MM_DD);
            try {
                //将string类型转换成Date类型
                final Date startDate = simpleDateFormat.parse(startDateStr);
                final Date endDate = simpleDateFormat.parse(endDateStr);
                //计算两日期间相差天数
                final long time = (endDate.getTime() - startDate.getTime()) / 1000 / 3600 / 24;

                for (int i = 0; i <= time; i++) {
                    //创建calendar实例
                    final Calendar calendar = Calendar.getInstance();
                    calendar.setTime(startDate);
                    calendar.add(Calendar.DAY_OF_MONTH, i);
                    final String value = simpleDateFormat.format(calendar.getTime());
                    dateList.add(value);
                }
            } catch (final ParseException e) {
                e.printStackTrace();
            }
        }

        return dateList;
    }

    /**
     * 格式
     *
     * @param date 日期
     * @return {@link String}
     */
    public static String format(Date date) {
        return format(date, "yyyy-MM-dd");
    }

    /**
     * 格式
     *
     * @param date     日期
     * @param formater 编制器
     * @return {@link String}
     */
    public static String format(Date date, String formater) {
        SimpleDateFormat sdf = new SimpleDateFormat(formater);
        return sdf.format(date);
    }

    /**
     * 获取指定日期是星期几<br>
     *
     * @param date 指定日期
     * @return 指定日期是星期几
     */
    public static String getWeekOfDate(String date) {
        String res = null;
        try {
            Date parseDate = DateUtils.parseDate(date, DateUtil.YYYY_MM_DD);
            String[] weekDays = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
            Calendar cal = Calendar.getInstance();
            cal.setTime(parseDate);
            int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
            if (w < 0) {
                w = 0;
            }
            res = weekDays[w];
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return res;
    }

    /**
     * 是之前的日期
     *
     * @param date        日期
     * @param compareDate 比较日期
     * @return boolean
     */
    public static boolean isBeforeDate(String date, String compareDate) {

        boolean result = false;
        if (StringUtils.isNotBlank(date) && StringUtils.isNotBlank(compareDate)) {
            try {
                Date parseDate = DateUtil.parseDate(date, YYYY_MM_DD);
                Date parseCompareDate = DateUtil.parseDate(compareDate, YYYY_MM_DD);
                result = parseCompareDate.before(parseDate);

            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        return result;

    }

    /**
     * 是否是之后的日期
     *
     * @param date        日期
     * @param compareDate 比较日期
     * @return boolean
     */
    public static boolean isAfterDate(String date, String compareDate) {

        boolean result = false;
        if (StringUtils.isNotBlank(date) && StringUtils.isNotBlank(compareDate)) {
            try {
                Date parseDate = DateUtil.parseDate(date, YYYY_MM_DD);
                Date parseCompareDate = DateUtil.parseDate(compareDate, YYYY_MM_DD);
                result = parseCompareDate.after(parseDate);

            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        return result;

    }

    /**
     * 添加日期
     *
     * @param date 日期
     * @param day  一天
     * @return {@link String}
     */
    public static String addDate(String date, int day) {
        String result = null;

        if (StringUtils.isNotBlank(date)) {
            try {
                Date parseDate = DateUtil.parseDate(date, YYYY_MM_DD);
                Date resDay = DateUtils.addDays(parseDate, day);
                result = DateUtil.format(resDay);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }

        return result;
    }

    /**
     * JAVA计算两个日期相差多少天(by Date String with format "yyyy-MM-dd")
     *
     * @param endDateStr   endDateStr
     * @param startDateStr startDateStr
     * @return int
     */
    public static int daysDiff(String endDateStr, String startDateStr) {
        int a = 0;
        try {
            Date endDate = DateUtils.parseDate(endDateStr, DateUtil.YYYY_MM_DD);
            Date startDate = DateUtils.parseDate(startDateStr, DateUtil.YYYY_MM_DD);
            a = (int) ((endDate.getTime() - startDate.getTime()) / (1000 * 3600 * 24));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return a;
    }

    /**
     * 日期是否是今天
     *
     * @param date 日期
     * @return boolean
     */
    public static boolean isToday(Date date) {
        // 当前时间
        Date now = new Date();
        //获取今天的日期
        String nowDay = format(now);
        //对比的日期
        String day = format(date);
        return day.equals(nowDay);
    }

    /**
     * 判断当前时间是否在[startTime, endTime]区间,注意时间格式要一致
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 结果
     */
    public static boolean isEffectiveDateTime(Date nowTime, Date startTime, Date endTime) {

        if (nowTime.getTime() == startTime.getTime()
                || nowTime.getTime() == endTime.getTime()) {
            return true;
        }

        Calendar date = Calendar.getInstance();
        date.setTime(nowTime);

        Calendar begin = Calendar.getInstance();
        begin.setTime(startTime);

        Calendar end = Calendar.getInstance();
        end.setTime(endTime);

        if (date.after(begin) && date.before(end)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 判断当前时间是否在endTime之前,注意时间格式要一致
     *
     * @param endTime 结束时间
     * @return 结果
     */
    public static boolean isBeforeDateTime(Date nowTime, Date endTime) {

        /*if (nowTime.getTime() == startTime.getTime()
                || nowTime.getTime() == endTime.getTime()) {
            return true;
        }*/

        Calendar date = Calendar.getInstance();
        date.setTime(nowTime);

        Calendar end = Calendar.getInstance();
        end.setTime(endTime);

        if (date.before(end)) {
            return true;
        } else {
            return false;
        }
    }

    public static void main(final String[] args) {

        try {
            boolean effectiveDateTime = isBeforeDateTime(DateUtil.parseDate(format(new Date(), HH_MM), HH_MM), DateUtil.parseDate("15:00", HH_MM));
            System.out.println(effectiveDateTime);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        //boolean today = isToday(new Date());
        //System.out.println(today);

        //String specifiedDayAfter = getSpecifiedDayAfter("2021-12-31");
        //System.out.println(specifiedDayAfter);
        //String before = getSpecifiedDayBefore("2021-03-01");

        List<String> betweenDateList = getBetweenDateList("2021-02-20", "2021-02-20");
        System.out.println(JSONUtil.toJsonStr(betweenDateList));

        //System.out.println(isBeforeDate("2021-12-22", "2021-12-20"));
        //System.out.println(isAfterDate("2021-12-22", "2021-12-23"));
        //System.out.println(addDate("2021-12-22",3));
        //System.out.println(getWeekOfDate(new Date()));

        // : 2021/12/22 判断获取预约默认日期范围
        String startDate = "2021-11-21";
        String endDate = "2022-01-01";
        //String today = "2021-12-22";
        //Integer groupSkuQuantity = 5;
        判断开始时间是否在今天之前
        //String defStartDate = DateUtil.isBeforeDate(today, startDate) ? today : startDate;
        //System.out.println(defStartDate);
        计算最低选择天数后的日期
        //String addDate = DateUtil.addDate(defStartDate, groupSkuQuantity);
        //System.out.println(addDate);
        判断结束时间是否在计算日期之后
        //String defEndDate = DateUtil.isAfterDate(endDate, addDate) ? endDate : addDate;
        //System.out.println(defEndDate);

        System.out.println(daysDiff(endDate, startDate));
        System.out.println(getWeekOfDate(startDate));
        System.out.println(getWeekOfDate(endDate));
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值