时间工具类

该博客分享了一组Java时间工具类,包括时间格式定义、Date、LocalDate、LocalDateTime、LocalTime及String之间的转换方法,还提供了判断时间区间、计算时间差、获取SQL常用时间表达式等功能。这些实用工具类简化了日期和时间的操作。

JAVA代码中 通常使用时间时 需要各种格式化,解决问题作者收录了一下方法

1.定义时间格式

	/**定义常见格式*/
    private static String FORMAT_DATE_TIME = "yyyy-MM-dd HH:mm:ss";
    private static String FORMAT_DATE = "yyyy-MM-dd";
    private static String FORMAT_TIME = "HH:mm:ss";
    private static String FORMAT_UTC_DATE_TIME = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";

2.date,localdate,localdatetime,localtime,String的相互转换

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

    /**
     * Date转LocalTime
     *
     * @param date
     */
    public static LocalTime date2LocalTime(Date date) {
        if (null == date) {
            return null;
        }
        return date.toInstant().atZone(ZoneId.systemDefault()).toLocalTime();
    }

    /**
     * Date转LocalDate
     *
     * @param date
     */
    public static LocalDate date2LocalDate(Date date) {
        if (null == date) {
            return null;
        }
        return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
    }

    /**
     * UTCString date转Date
     *
     * @param dateString
     * @return
     */
    public static Date UTCString2Date(String dateString) throws ParseException {
        SimpleDateFormat df2 = new SimpleDateFormat(FORMAT_UTC_DATE_TIME);
        df2.setTimeZone(TimeZone.getTimeZone("UTC"));
        return df2.parse(dateString);
    }


    /**
     * String 转date
     *
     * @param strDate
     * @return
     */
    public static Date string2Date(String strDate) {
        return getDateByString(strDate, FORMAT_DATE_TIME);
    }

    /**
     * String 转date(带格式)
     *
     * @param strDate
     * @return
     */
    public static Date string2Date(String strDate, String pattern) {
        return getDateByString(strDate, pattern);
    }

    /**
     * date转String
     *
     * @param date
     * @return
     */
    public static String date2String(Date date) {
        return getStringByDate(date, FORMAT_DATE_TIME);
    }

    /**
     * date转String(带格式)
     *
     * @param date
     * @return
     */
    public static String date2String(Date date, String pattern) {
        return getStringByDate(date, pattern);
    }

    private static Date getDateByString(String strDate, String pattern) {
        if (strDate == null) {
            return null;
        }
        SimpleDateFormat formatter = new SimpleDateFormat(pattern);
        Date utilDate = null;
        try {
            utilDate = formatter.parse(strDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        if (utilDate == null) {
            return null;
        }
        return new Date(utilDate.getTime());
    }

    private static String getStringByDate(Date date, String pattern) {
        if (null == date) {
            return null;
        }
        return new SimpleDateFormat(pattern).format(date);
    }

3.常用工具类代码(包含)

判断date在startTime和endTime区间
/**
     * 判断date在startTime和endTime区间
     * 只判断时分秒
     *
     * @param date      时间
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return
     */
    public static Boolean betweenTimeRange(Date date, Date startTime, Date endTime) {
        if (date == null) {
            date = new Date();
        }
        if (startTime == null || endTime == null) {
            return false;
        }
        LocalTime localTime = date2LocalTime(date);
        LocalTime localStartTime = date2LocalTime(startTime);
        LocalTime localEndTime = date2LocalTime(endTime);
        return localTime.isAfter(localStartTime) && localTime.isBefore(localEndTime);
    }

判断现在日期和目标日期相差时长(单位可以定义)
/**
     * 判断现在日期和目标日期相差时长
     * (支持yyyy-MM-dd HH:mm:ss)
     *
     * @param aDate    日期A
     * @param bDate    日期A
     * @param timeUnit 差单位(null就是毫秒值)
     * @return 时间差
     */
    public static Long getABSDateTimeRange(Date aDate, Date bDate, TimeUnit timeUnit) {
        if (null == aDate || null == bDate) {
            return null;
        }
        // 取得毫秒差
        long diff = Math.abs(aDate.getTime() - bDate.getTime());
        switch (timeUnit) {
            case NANOSECONDS:// 纳秒
                return TimeUnit.MILLISECONDS.toNanos(diff);
            case MICROSECONDS:// 微秒
                return TimeUnit.MILLISECONDS.toMicros(diff);
            case MILLISECONDS:// 毫秒
                return TimeUnit.MILLISECONDS.toMillis(diff);
            case SECONDS://return TimeUnit.MILLISECONDS.toSeconds(diff);
            case MINUTES:// 分钟
                return TimeUnit.MILLISECONDS.toMinutes(diff);
            case HOURS:// 小时
                return TimeUnit.MILLISECONDS.toHours(diff);
            case DAYS:// 天数
                return TimeUnit.MILLISECONDS.toDays(diff);
            default:
                return null;
        }
    }
判断现在日期和目标日期相差天数或秒数(细化方法)
	/**
     * 判断现在日期和目标日期相差天数
     * (支持yyyy-MM-dd)
     *
     * @param targetDate 目标日期
     * @return
     */
    public static Long getABSDateRange(Date targetDate) {
        if (null == targetDate) {
            return null;
        }
        return Math.abs(date2LocalDate(targetDate).toEpochDay() - LocalDate.now().toEpochDay());
    }
	/**
     * 判断现在时间和目标时间相差秒数
     * (支持yyyy-MM-dd HH:mm:ss)
     *
     * @param targetTime 目标时间
     * @return
     */
    public static Integer getABSTimeRange(String targetTime) {
        if (StringUtils.isBlank(targetTime)) {
            return null;
        }
        LocalTime targetDateTime = LocalTime.parse(targetTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        return Math.abs(targetDateTime.toSecondOfDay() - LocalTime.now().toSecondOfDay());
    }

SQL常用的(date月第一天,最后一天,当天00:00:00或23:59:59")
 /**
     * 获取传入时间的当前月第一天
     *
     * @param now 时间
     * @return 传入时间的当前月第一天
     */
    public static Date getFirstDayByCurrentMonth(Date now) {
        if (now == null) {
            return null;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(now);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.add(Calendar.MONTH, 0);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        return calendar.getTime();
    }

    /**
     * 获取传入时间的当前月最后一天
     *
     * @param now 时间
     * @return 传入时间的当前月最后一天
     */
    public static Date getLastDayByCurrentMonth(Date now) {
        if (now == null) {
            return null;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(now);
        calendar.set(Calendar.DAY_OF_MONTH, 0);
        calendar.add(Calendar.MONTH, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        return calendar.getTime();
    }

    /**
     * 获取传入时间的当天00:00:00
     *
     * @param now 时间
     * @return 传入时间的当天00:00:00
     */
    public static Date getFirstTimeByDay(Date now) {
        if (now == null) {
            return null;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(now);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        return calendar.getTime();
    }

    /**
     * 获取传入时间的当天23:59:59
     *
     * @param now 时间
     * @return 获取传入时间的当天23:59:59
     */
    public static Date getLastTimeByDay(Date now) {
        if (now == null) {
            return null;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(now);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        return calendar.getTime();
    }
时间时分秒处理
	 /**
     * 获取参数时间修改后的时间
     *
     * @param sourceDate   时间
     * @param var          修改量级(后为正数,前为负数)
     * @param calendarUnit 时间单位(默认天)
     *                     注意Calendar.HOUR_OF_DAY是24小时制,Calendar.HOUR是12小时制
     *                     修改天数需要使用Calendar.DATE|Calendar.DAY_OF_MONTH和DAY_OF_YEAR也可行,未测试
     * @return targetDate 参数时间修改后的时间
     */
    public static Date getTargetDate(Date sourceDate, Integer var, Integer calendarUnit) {
        if (sourceDate == null) {
            return null;
        }
        if (var == null || var == 0) {
            return sourceDate;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(sourceDate);
        calendar.add(calendarUnit, var);
        return calendar.getTime();
    }


/**
     * 获取参数时间天数后的时间
     *
     * @param now  时间
     * @param days 天数
     * @return 参数时间天数后的时间
     */
    public static Date getXAfterDay(Date now, Integer days) {
        if (days == null) {
            return null;
        }
        if (now == null) {
            return null;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(now);
        calendar.add(Calendar.DATE, days);
        return calendar.getTime();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aloneii

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值