All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.soento.core.util.DateUtil Maven / Gradle / Ivy

package com.soento.core.util;

import com.soento.core.enums.DateFormat;
import com.soento.core.enums.DateUnit;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 * 日期工具类
 *
 * @author soento
 */
public class DateUtil {
    private DateUtil() {
    }

    /**
     * 将日期转换为yyyy-MM-dd HH:mm:ss SSS的字符串
     *
     * @param date 日期
     * @return 转换结果
     */
    public static String toString(Date date) {
        return toString(date, DateFormat.YYYYMMDDHHMISSMS_DASH);
    }

    /**
     * 将日期转换为指定格式的字符串
     *
     * @param date   日期
     * @param format 日期格式
     * @return 转换结果
     */
    public static String toString(Date date, DateFormat format) {
        return format.instance().format(date);
    }

    /**
     * 转换为Calendar对象
     *
     * @param date 日期对象
     * @return Calendar对象
     */
    public static Calendar toCalendar(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal;
    }

    /**
     * 转换为Calendar对象
     *
     * @param millis 时间戳
     * @return Calendar对象
     */
    public static Calendar toCalendar(long millis) {
        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(millis);
        return cal;
    }

    /**
     * 日期类型转换
     *
     * @param utilDate 日期
     * @return 转换结果
     */
    public static java.sql.Date toSQLDate(Date utilDate) {
        if (null == utilDate) {
            return null;
        }
        return new java.sql.Date(utilDate.getTime());
    }

    /**
     * 日期类型转换
     *
     * @param timestamp 日期
     * @return 转换结果
     */
    public static java.sql.Date toSQLDate(Timestamp timestamp) {
        if (null == timestamp) {
            return null;
        }
        return new java.sql.Date(timestamp.getTime());
    }

    /**
     * 日期字符串转换为日期类型
     *
     * @param strDate 日期
     * @return 转换结果
     */
    public static Date toDate(String strDate) {
        if (null == strDate) {
            return null;
        }
        return toDate(strDate, getDateFormat(strDate));
    }

    /**
     * 日期字符串转换为日期类型
     *
     * @param strDate 日期
     * @param format  日期格式
     * @return 转换结果
     */
    public static Date toDate(String strDate, DateFormat format) {
        try {
            if (null == strDate) {
                return null;
            }
            SimpleDateFormat sdf = format.instance();
            sdf.setLenient(false);
            return sdf.parse(strDate);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 日期字符串转换为日期类型
     *
     * @param strDate 日期
     * @param format  日期格式
     * @return 转换结果
     */
    public static Date toDate(String strDate, String format) {
        try {
            if (null == strDate) {
                return null;
            }
            SimpleDateFormat sdf = DateFormat.valueOf(format).instance();
            sdf.setLenient(false);
            return sdf.parse(strDate);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 日期类型转换
     *
     * @param sqlDate 日期
     * @return 转换结果
     */
    public static Timestamp toTimestamp(java.sql.Date sqlDate) {
        if (null == sqlDate) {
            return null;
        }
        return new Timestamp(sqlDate.getTime());
    }

    /**
     * 日期类型转换
     *
     * @param utilDate 日期
     * @return 转换结果
     */
    public static Timestamp toTimestamp(Date utilDate) {
        if (null == utilDate) {
            return null;
        }
        return new Timestamp(utilDate.getTime());
    }

    /**
     * 日期类型转换
     *
     * @param sqlDate 日期
     * @return 转换结果
     */
    public static Date toDate(java.sql.Date sqlDate) {
        if (null == sqlDate) {
            return null;
        }
        return new Date(sqlDate.getTime());
    }

    /**
     * 日期类型转换
     *
     * @param timestamp 日期
     * @return 转换结果
     */
    public static Date toDate(Timestamp timestamp) {
        if (null == timestamp) {
            return null;
        }
        return new Date(timestamp.getTime());
    }

    /**
     * 获取日期字符串的日期格式
     *
     * @param strDate 日期
     * @return 转换结果
     */
    public static DateFormat getDateFormat(String strDate) {
        if (StringUtil.isBlank(strDate)) {
            throw new RuntimeException("空字符串不能转换日期格式");
        }
        int length = strDate.length();
        final int num6 = 6;
        if (length < num6) {
            throw new RuntimeException(strDate + "不是日期类型的字符串");
        }
        if (CheckUtil.isNumber(strDate)) {
            return getDateFormatByNumber(strDate);
        } else if (strDate.matches("^[0-9]{4}\\/[0-9]{1,2}$")) {
            return getDateFormat12(strDate);
        } else if (strDate.matches("^[0-9]{4}-[0-9]{1,2}$")) {
            return getDateFormat11(strDate);
        } else if (strDate.matches("^[0-9]{4}\\/[0-9]{1,2}\\/[0-9]{1,2}$")) {
            return getDateFormat10(strDate);
        } else if (strDate.matches("^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$")) {
            return getDateFormat9(strDate);
        } else if (strDate.matches("^[0-9]{4}\\/[0-9]{1,2}\\/[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}$")) {
            return getDateFormat8(strDate);
        } else if (strDate.matches("^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}$")) {
            return getDateFormat7(strDate);
        } else if (strDate.matches("^[0-9]{4}\\/[0-9]{1,2}\\/[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$")) {
            return getDateFormat6(strDate);
        } else if (strDate.matches("^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$")) {
            return getDateFormat5(strDate);
        } else if (strDate.matches("^[0-9]{4}\\/[0-9]{1,2}\\/[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2} [0-9]{1,3}$")) {
            return getDateFormat4(strDate);
        } else if (strDate.matches("^[0-9]{4}\\/[0-9]{1,2}\\/[0-9]{1,2}\\.[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}\\.[0-9]{1,3}$")) {
            return getDateFormat3(strDate);
        } else if (strDate.matches("^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2} [0-9]{1,3}$")) {
            return getDateFormat2(strDate);
        } else if (strDate.matches("^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}\\.[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}\\.[0-9]{1,3}$")) {
            return getDateFormat1(strDate);
        } else {
            throw new RuntimeException(strDate + "不是日期类型的字符串");
        }
    }

    private static DateFormat getDateFormat12(String strDate) {
        String[] tmp = strDate.split("\\/");
        if (CheckUtil.isMonth(tmp[1])) {
            return DateFormat.YYYYMM_SLASH;
        } else {
            throw new RuntimeException(strDate + "的月份不正确");
        }
    }

    private static DateFormat getDateFormat11(String strDate) {
        String[] tmp = strDate.split("-");
        if (CheckUtil.isMonth(tmp[1])) {
            return DateFormat.YYYYMM_DASH;
        } else {
            throw new RuntimeException(strDate + "的月份不正确");
        }
    }

    private static DateFormat getDateFormat10(String strDate) {
        String[] tmp = strDate.split("\\/");
        if (!CheckUtil.isMonth(tmp[1])) {
            throw new RuntimeException(strDate + "的月份不正确");
        } else if (!CheckUtil.isDay(tmp[2])) {
            throw new RuntimeException(strDate + "的天数不正确");
        } else {
            return DateFormat.YYYYMMDD_SLASH;
        }
    }

    private static DateFormat getDateFormat9(String strDate) {
        String[] tmp = strDate.split("-");
        if (!CheckUtil.isMonth(tmp[1])) {
            throw new RuntimeException(strDate + "的月份不正确");
        } else if (!CheckUtil.isDay(tmp[2])) {
            throw new RuntimeException(strDate + "的天数不正确");
        } else {
            return DateFormat.YYYYMMDD_DASH;
        }
    }

    private static DateFormat getDateFormat8(String strDate) {
        String[] tmp = strDate.split(" ");
        String[] ymd = tmp[0].split("\\/");
        String[] hm = tmp[1].split(":");
        if (!CheckUtil.isMonth(ymd[1])) {
            throw new RuntimeException(strDate + "的月份不正确");
        } else if (!CheckUtil.isDay(ymd[2])) {
            throw new RuntimeException(strDate + "的天数不正确");
        } else if (!CheckUtil.isHour(hm[0])) {
            throw new RuntimeException(strDate + "的小时不正确");
        } else if (!CheckUtil.isMinute(hm[1])) {
            throw new RuntimeException(strDate + "的分钟不正确");
        } else {
            return DateFormat.YYYYMMDDHHMI_SLASH;
        }
    }

    private static DateFormat getDateFormat7(String strDate) {
        String[] tmp = strDate.split(" ");
        String[] ymd = tmp[0].split("-");
        String[] hm = tmp[1].split(":");
        if (!CheckUtil.isMonth(ymd[1])) {
            throw new RuntimeException(strDate + "的月份不正确");
        } else if (!CheckUtil.isDay(ymd[2])) {
            throw new RuntimeException(strDate + "的天数不正确");
        } else if (!CheckUtil.isHour(hm[0])) {
            throw new RuntimeException(strDate + "的小时不正确");
        } else if (!CheckUtil.isMinute(hm[1])) {
            throw new RuntimeException(strDate + "的分钟不正确");
        } else {
            return DateFormat.YYYYMMDDHHMI_DASH;
        }
    }

    private static DateFormat getDateFormat6(String strDate) {
        String[] tmp = strDate.split(" ");
        String[] ymd = tmp[0].split("\\/");
        String[] hms = tmp[1].split(":");
        if (!CheckUtil.isMonth(ymd[1])) {
            throw new RuntimeException(strDate + "的月份不正确");
        } else if (!CheckUtil.isDay(ymd[2])) {
            throw new RuntimeException(strDate + "的天数不正确");
        } else if (!CheckUtil.isHour(hms[0])) {
            throw new RuntimeException(strDate + "的小时不正确");
        } else if (!CheckUtil.isMinute(hms[1])) {
            throw new RuntimeException(strDate + "的分钟不正确");
        } else if (!CheckUtil.isSecond(hms[2])) {
            throw new RuntimeException(strDate + "的秒数不正确");
        } else {
            return DateFormat.YYYYMMDDHHMISS_SLASH;
        }
    }

    private static DateFormat getDateFormat5(String strDate) {
        String[] tmp = strDate.split(" ");
        String[] ymd = tmp[0].split("-");
        String[] hms = tmp[1].split(":");
        if (!CheckUtil.isMonth(ymd[1])) {
            throw new RuntimeException(strDate + "的月份不正确");
        } else if (!CheckUtil.isDay(ymd[2])) {
            throw new RuntimeException(strDate + "的天数不正确");
        } else if (!CheckUtil.isHour(hms[0])) {
            throw new RuntimeException(strDate + "的小时不正确");
        } else if (!CheckUtil.isMinute(hms[1])) {
            throw new RuntimeException(strDate + "的分钟不正确");
        } else if (!CheckUtil.isSecond(hms[2])) {
            throw new RuntimeException(strDate + "的秒数不正确");
        } else {
            return DateFormat.YYYYMMDDHHMISS_DASH;
        }
    }

    private static DateFormat getDateFormat4(String strDate) {
        String[] tmp = strDate.split(" ");
        String[] ymd = tmp[0].split("\\/");
        String[] hms = tmp[1].split(":");
        if (!CheckUtil.isMonth(ymd[1])) {
            throw new RuntimeException(strDate + "的月份不正确");
        } else if (!CheckUtil.isDay(ymd[2])) {
            throw new RuntimeException(strDate + "的天数不正确");
        } else if (!CheckUtil.isHour(hms[0])) {
            throw new RuntimeException(strDate + "的小时不正确");
        } else if (!CheckUtil.isMinute(hms[1])) {
            throw new RuntimeException(strDate + "的分钟不正确");
        } else if (!CheckUtil.isSecond(hms[2])) {
            throw new RuntimeException(strDate + "的秒数不正确");
        } else {
            return DateFormat.YYYYMMDDHHMISSMS_SLASH;
        }
    }

    private static DateFormat getDateFormat3(String strDate) {
        String[] tmp = strDate.split("\\.");
        String[] ymd = tmp[0].split("\\/");
        String[] hms = tmp[1].split(":");
        if (!CheckUtil.isMonth(ymd[1])) {
            throw new RuntimeException(strDate + "的月份不正确");
        } else if (!CheckUtil.isDay(ymd[2])) {
            throw new RuntimeException(strDate + "的天数不正确");
        } else if (!CheckUtil.isHour(hms[0])) {
            throw new RuntimeException(strDate + "的小时不正确");
        } else if (!CheckUtil.isMinute(hms[1])) {
            throw new RuntimeException(strDate + "的分钟不正确");
        } else if (!CheckUtil.isSecond(hms[2])) {
            throw new RuntimeException(strDate + "的秒数不正确");
        } else {
            return DateFormat.YYYYMMDDHHMISSMS_SLASH_POINT;
        }
    }

    private static DateFormat getDateFormat2(String strDate) {
        String[] tmp = strDate.split(" ");
        String[] ymd = tmp[0].split("-");
        String[] hms = tmp[1].split(":");
        if (!CheckUtil.isMonth(ymd[1])) {
            throw new RuntimeException(strDate + "的月份不正确");
        } else if (!CheckUtil.isDay(ymd[2])) {
            throw new RuntimeException(strDate + "的天数不正确");
        } else if (!CheckUtil.isHour(hms[0])) {
            throw new RuntimeException(strDate + "的小时不正确");
        } else if (!CheckUtil.isMinute(hms[1])) {
            throw new RuntimeException(strDate + "的分钟不正确");
        } else if (!CheckUtil.isSecond(hms[2])) {
            throw new RuntimeException(strDate + "的秒数不正确");
        } else {
            return DateFormat.YYYYMMDDHHMISSMS_DASH;
        }
    }

    private static DateFormat getDateFormat1(String strDate) {
        String[] tmp = strDate.split("\\.");
        String[] ymd = tmp[0].split("-");
        String[] hms = tmp[1].split(":");
        if (!CheckUtil.isMonth(ymd[1])) {
            throw new RuntimeException(strDate + "的月份不正确");
        } else if (!CheckUtil.isDay(ymd[2])) {
            throw new RuntimeException(strDate + "的天数不正确");
        } else if (!CheckUtil.isHour(hms[0])) {
            throw new RuntimeException(strDate + "的小时不正确");
        } else if (!CheckUtil.isMinute(hms[1])) {
            throw new RuntimeException(strDate + "的分钟不正确");
        } else if (!CheckUtil.isSecond(hms[2])) {
            throw new RuntimeException(strDate + "的秒数不正确");
        } else {
            return DateFormat.YYYYMMDDHHMISSMS_DASH_POINT;
        }
    }

    private static DateFormat getDateFormatByNumber(String strDate) {
        int length = strDate.length();
        final int num4 = 4;
        final int num6 = 6;
        final int num8 = 8;
        final int num10 = 10;
        final int num12 = 12;
        final int num14 = 14;
        final int num17 = 17;
        if (length == num6) {
            if (CheckUtil.isMonth(strDate.substring(num4, num6))) {
                return DateFormat.YYYYMM;
            } else {
                throw new RuntimeException(strDate + "的月份不正确");
            }
        } else if (length == num8) {
            if (!CheckUtil.isMonth(strDate.substring(num4, num6))) {
                throw new RuntimeException(strDate + "的月份不正确");
            } else if (!CheckUtil.isDay(strDate.substring(num6, num8))) {
                throw new RuntimeException(strDate + "的天数不正确");
            } else {
                return DateFormat.YYYYMMDD;
            }
        } else if (length == num12) {
            if (!CheckUtil.isMonth(strDate.substring(num4, num6))) {
                throw new RuntimeException(strDate + "的月份不正确");
            } else if (!CheckUtil.isDay(strDate.substring(num6, num8))) {
                throw new RuntimeException(strDate + "的天数不正确");
            } else if (!CheckUtil.isHour(strDate.substring(num8, num10))) {
                throw new RuntimeException(strDate + "的小时不正确");
            } else if (!CheckUtil.isMinute(strDate.substring(num10, num12))) {
                throw new RuntimeException(strDate + "的分钟不正确");
            } else {
                return DateFormat.YYYYMMDDHHMI;
            }
        } else if (length == num14) {
            if (!CheckUtil.isMonth(strDate.substring(num4, num6))) {
                throw new RuntimeException(strDate + "的月份不正确");
            } else if (!CheckUtil.isDay(strDate.substring(num6, num8))) {
                throw new RuntimeException(strDate + "的天数不正确");
            } else if (!CheckUtil.isHour(strDate.substring(num8, num10))) {
                throw new RuntimeException(strDate + "的小时不正确");
            } else if (!CheckUtil.isMinute(strDate.substring(num10, num12))) {
                throw new RuntimeException(strDate + "的分钟不正确");
            } else if (!CheckUtil.isSecond(strDate.substring(num12, num14))) {
                throw new RuntimeException(strDate + "的秒数不正确");
            } else {
                return DateFormat.YYYYMMDDHHMISS;
            }
        } else if (length == num17) {
            if (!CheckUtil.isMonth(strDate.substring(num4, num6))) {
                throw new RuntimeException(strDate + "的月份不正确");
            } else if (!CheckUtil.isDay(strDate.substring(num6, num8))) {
                throw new RuntimeException(strDate + "的天数不正确");
            } else if (!CheckUtil.isHour(strDate.substring(num8, num10))) {
                throw new RuntimeException(strDate + "的小时不正确");
            } else if (!CheckUtil.isMinute(strDate.substring(num10, num12))) {
                throw new RuntimeException(strDate + "的分钟不正确");
            } else if (!CheckUtil.isSecond(strDate.substring(num12, num14))) {
                throw new RuntimeException(strDate + "的秒数不正确");
            } else {
                return DateFormat.YYYYMMDDHHMISSMS;
            }
        } else {
            throw new RuntimeException(strDate + "不是日期类型的字符串");
        }
    }

    /**
     * 获得年的部分
     *
     * @param date 日期
     * @return 年的部分
     */
    public static int getYear(Date date) {
        return toCalendar(date).get(Calendar.YEAR);
    }

    /**
     * 获得指定日期所属季节
     *
     * @param date 日期
     * @return 第几个季节
     */
    public static int getSeason(Date date) {
        return (toCalendar(date).get(Calendar.MONTH) + 1) / 3 + 1;
    }

    /**
     * 获得月的部分
     *
     * @param date 日期
     * @return 月的部分
     */
    public static int getMonth(Date date) {
        return toCalendar(date).get(Calendar.MONTH) + 1;
    }

    /**
     * 获得日的部分
     *
     * @param date 日期
     * @return 日的部分
     */
    public static int getDay(Date date) {
        return toCalendar(date).get(Calendar.DAY_OF_MONTH);
    }

    /**
     * 获得时的部分
     *
     * @param date 日期
     * @return 时的部分
     */
    public static int getHour(Date date) {
        return toCalendar(date).get(Calendar.HOUR_OF_DAY);
    }

    /**
     * 获得分的部分
     *
     * @param date 日期
     * @return 分的部分
     */
    public static int getMinute(Date date) {
        return toCalendar(date).get(Calendar.MINUTE);
    }

    /**
     * 获得秒的部分
     *
     * @param date 日期
     * @return 秒的部分
     */
    public static int getSecond(Date date) {
        return toCalendar(date).get(Calendar.SECOND);
    }

    /**
     * 获得毫秒的部分
     *
     * @param date 日期
     * @return 毫秒的部分
     */
    public static int getMillisecond(Date date) {
        return toCalendar(date).get(Calendar.MILLISECOND);
    }

    /**
     * 获得指定日期是所在年份的第几周
* * @param date 日期 * @return 周 */ public static int getWeekOfYear(Date date) { return toCalendar(date).get(Calendar.WEEK_OF_YEAR); } /** * 获得指定日期是所在月份的第几周
* * @param date 日期 * @return 周 */ public static int getWeekOfMonth(Date date) { return toCalendar(date).get(Calendar.WEEK_OF_MONTH); } /** * 获得指定日期是所在年份的第几天
* * @param date 日期 * @return 天 */ public static int getDayOfYear(Date date) { return toCalendar(date).get(Calendar.DAY_OF_YEAR); } /** * 获得指定日期是所在月份的第几天
* * @param date 日期 * @return 天 */ public static int getDayOfMonth(Date date) { return toCalendar(date).get(Calendar.DAY_OF_MONTH); } /** * 获得指定日期是所在周的第几天
* * @param date 日期 * @return 天 */ public static int getDayOfWeek(Date date) { return toCalendar(date).get(Calendar.DAY_OF_WEEK); } /** * 是否为上午 * * @param date 日期 * @return 是否为上午 */ public static boolean isAM(Date date) { return Calendar.AM == toCalendar(date).get(Calendar.AM_PM); } /** * 是否为下午 * * @param date 日期 * @return 是否为下午 */ public static boolean isPM(Date date) { return Calendar.PM == toCalendar(date).get(Calendar.AM_PM); } /** * 当前时间 * * @return 时间 */ public static Date date() { return new Date(); } /** * 是否闰年 * * @param year 年 * @return 是否闰年 */ public static boolean isLeapYear(int year) { return new GregorianCalendar().isLeapYear(year); } /** * 获取指定日期偏移指定时间后的时间 * * @param date 基准日期 * @param field 偏移的粒度大小(小时、天、月等) * @param offset 偏移量,正数为向后偏移,负数为向前偏移 * @return 偏移后的日期 */ public static Date add(Date date, int field, int offset) { Calendar calendar = toCalendar(date); calendar.add(field, offset); return calendar.getTime(); } /** * 偏移毫秒数 * * @param date 日期 * @param offset 偏移毫秒数,正数向未来偏移,负数向历史偏移 * @return 偏移后的日期 */ public static Date addMillisecond(Date date, int offset) { return add(date, Calendar.MILLISECOND, offset); } /** * 偏移秒数 * * @param date 日期 * @param offset 偏移秒数,正数向未来偏移,负数向历史偏移 * @return 偏移后的日期 */ public static Date addSecond(Date date, int offset) { return add(date, Calendar.SECOND, offset); } /** * 偏移分钟 * * @param date 日期 * @param offset 偏移分钟数,正数向未来偏移,负数向历史偏移 * @return 偏移后的日期 */ public static Date addMinute(Date date, int offset) { return add(date, Calendar.MINUTE, offset); } /** * 偏移小时 * * @param date 日期 * @param offset 偏移小时数,正数向未来偏移,负数向历史偏移 * @return 偏移后的日期 */ public static Date addHour(Date date, int offset) { return add(date, Calendar.HOUR_OF_DAY, offset); } /** * 偏移天 * * @param date 日期 * @param offset 偏移天数,正数向未来偏移,负数向历史偏移 * @return 偏移后的日期 */ public static Date addDay(Date date, int offset) { return add(date, Calendar.DAY_OF_YEAR, offset); } /** * 偏移周 * * @param date 日期 * @param offset 偏移周数,正数向未来偏移,负数向历史偏移 * @return 偏移后的日期 */ public static Date addWeek(Date date, int offset) { return add(date, Calendar.WEEK_OF_YEAR, offset); } /** * 偏移月 * * @param date 日期 * @param offset 偏移月数,正数向未来偏移,负数向历史偏移 * @return 偏移后的日期 */ public static Date addMonth(Date date, int offset) { return add(date, Calendar.MONTH, offset); } /** * 偏移年 * * @param date 日期 * @param offset 偏移年数,正数向未来偏移,负数向历史偏移 * @return 偏移后的日期 */ public static Date addYear(Date date, int offset) { return add(date, Calendar.YEAR, offset); } /** * 判断两个日期相差的时长 * * @param unit 相差的单位:相差 天{@link DateUnit#DAY}、小时{@link DateUnit#HOUR} 等 * @param beginDate 起始日期 * @param endDate 结束日期 * @return 日期差 */ public static long between(DateUnit unit, Date beginDate, Date endDate) { final Date begin; final Date end; if (beginDate.before(endDate)) { begin = beginDate; end = endDate; } else { begin = endDate; end = beginDate; } long diff = end.getTime() - begin.getTime(); return diff / unit.value(); } /** * 判断是否在两个日期之间 * * @param date 相差的单位:相差 天{@link DateUnit#DAY}、小时{@link DateUnit#HOUR} 等 * @param beginDate 起始日期 * @param endDate 结束日期 * @return 0:在两个日期之间,1:大于大的日期,-1:小于小的日期 */ public static int between(Date date, Date beginDate, Date endDate) { long beginMills = beginDate.getTime(); long endMills = endDate.getTime(); long thisMills = date.getTime(); if (thisMills > endMills) { return 1; } else if (thisMills < beginMills) { return -1; } else { return 0; } } /** * 获取某日期的开始时间 * * @param date 日期 {@link Date} * @return {@link Date} */ public static Date beginOfDay(Date date) { Calendar calendar = toCalendar(date); 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 日期 {@link Date} * @return {@link Date} */ public static Date endOfDay(Date date) { Calendar calendar = toCalendar(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 日期 {@link Date} * @return {@link Date} */ public static Date beginOfWeek(Date date) { Calendar calendar = toCalendar(date); calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); return beginOfDay(calendar.getTime()); } /** * 获取某周的结束时间 * * @param date 日期 {@link Date} * @return {@link Date} */ public static Date endOfWeek(Date date) { Calendar calendar = toCalendar(date); calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY); return endOfDay(calendar.getTime()); } /** * 获取某月的开始时间 * * @param date 日期 {@link Date} * @return {@link Date} */ public static Date beginOfMonth(Date date) { Calendar calendar = toCalendar(date); calendar.set(Calendar.DAY_OF_MONTH, 1); return beginOfDay(calendar.getTime()); } /** * 获取某月的结束时间 * * @param date 日期 {@link Date} * @return {@link Date} */ public static Date endOfMonth(Date date) { Calendar calendar = toCalendar(date); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); return endOfDay(calendar.getTime()); } /** * 获取某年的开始时间 * * @param date 日期 {@link Date} * @return {@link Date} */ public static Date beginOfYear(Date date) { Calendar calendar = toCalendar(date); calendar.set(Calendar.MONTH, 1); return beginOfMonth(calendar.getTime()); } /** * 获取某年的结束时间 * * @param date 日期 {@link Date} * @return {@link Date} */ public static Date endOfYear(Date date) { Calendar calendar = toCalendar(date); calendar.set(Calendar.MONTH, Calendar.DECEMBER); return endOfMonth(calendar.getTime()); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy