From a63357291977cc9665d7283a794ccd8c14107fdc Mon Sep 17 00:00:00 2001 From: Carol <947752894@qq.com> Date: Wed, 22 Sep 2021 13:13:22 +0800 Subject: [PATCH] Update DateUtil.java --- .../site/cnkj/common/utils/date/DateUtil.java | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/src/main/java/site/cnkj/common/utils/date/DateUtil.java b/src/main/java/site/cnkj/common/utils/date/DateUtil.java index 30f0da7..9a0cd89 100644 --- a/src/main/java/site/cnkj/common/utils/date/DateUtil.java +++ b/src/main/java/site/cnkj/common/utils/date/DateUtil.java @@ -664,4 +664,102 @@ public final class DateUtil { } return months; } + + /** + * 计算两个日期之间的天数,不包含结束日期当天. + * 如果结束日期小于开始日期,则返回负数天数. + * + * @param startDay 开始日期 + * @param endDay 结束日期 + * @param format 日期格式,开始日期和结束日期格式必须保持一致 + * @return 天数. + */ + public static long computerDaysBetween(String startDay, String endDay, String format){ + Long startTimestamp = translateDateToTimestamp(startDay, format); + Long endTimestamp = translateDateToTimestamp(endDay, format); + if (null != endTimestamp && null != startTimestamp){ + long change = endTimestamp - startTimestamp; + return change / (3600 * 24 * 1000); + } + throw new NullPointerException("one of startDay or endDay is null."); + } + + /** + * 计算两个日期之间的天数,不包含结束日期当天. + * 如果结束日期小于开始日期,则返回负数天数. + * + * @param startDay 开始日期 + * @param endDay 结束日期 + * @param format 日期格式,开始日期和结束日期格式必须保持一致 + * @return 天数. + */ + public static long computerDaysBetween(Date startDay, Date endDay, String format){ + String startString = translateDateToString(startDay, format); + String endString = translateDateToString(endDay, format); + return computerDaysBetween(startString, endString, format); + } + + /** + * 判断当前时间是否在范围内. + * 包含开始时间和结束时间的时间点. + * + * @param format 时间格式 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param checkTime 待判断时间 + * @return 判断结果,范围内 true 不在范围内 false + */ + public static boolean checkDateInRange(String format, String startTime, String endTime, String checkTime){ + Long startTimestamp = translateDateToTimestamp(startTime, format); + Long endTimestamp = translateDateToTimestamp(endTime, format); + Long checkTimestamp = translateDateToTimestamp(checkTime, format); + if (null == startTimestamp || null == endTimestamp || null == checkTimestamp){ + throw new NullPointerException(); + } + return startTimestamp <= checkTimestamp && checkTimestamp <= endTimestamp; + } + + /** + * 判断当前时间是否在范围内. + * 包含开始时间和结束时间的时间点. + * + * @param format 时间格式 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param checkTime 待判断时间 + * @return 判断结果,范围内 true 不在范围内 false + */ + public static boolean checkDateInRange(String format, Date startTime, Date endTime, Date checkTime){ + String startDate = translateDateToString(startTime, format); + String endDate = translateDateToString(endTime, format); + String checkDate = translateDateToString(checkTime, format); + return checkDateInRange(format, startDate, endDate, checkDate); + } + + /** + * 判断当前时间是否在范围内. + * 包含开始时间和结束时间的时间点. + * 如果checkEnd=true,则rangeTime为结束时间,表示1970-01-01 00:00:00 至 rangeTime的时间 + * 如果checkEnd=false,则rangeTime为开始时间时间,表示rangeTime 至 系统当前时间 + * + * @param format 时间格式 + * @param rangeTime 开始/结束时间 + * @param checkTime 待判断时间 + * @param checkEnd 当前范围为结束时间还是开始时间 + * @return 判断结果,范围内 true 不在范围内 false + */ + public static boolean checkDateInRange(String format, Date rangeTime, Date checkTime, boolean checkEnd){ + String rangeDate = translateDateToString(rangeTime, format); + String checkDate = translateDateToString(checkTime, format); + if (checkEnd){ + Calendar calendar = Calendar.getInstance(); + calendar.set(1970, Calendar.JANUARY, 1, 0, 0, 0); + String judgeDate = translateDateToString(calendar.getTime(), format); + return checkDateInRange(format, judgeDate, rangeDate, checkDate); + }else { + Date date = new Date(); + String judgeDate = translateDateToString(date, format); + return checkDateInRange(format, rangeDate, judgeDate, checkDate); + } + } }