LocalDateTime时间处理工具类

LocalDateTime是Java 8引入的日期时间类,表示一个不带时区的日期时间,包含年、月、日、小时、分钟、秒和毫秒等信息。它可以用于处理不涉及时区转换的日期时间计算和格式化输出。具体方法包括:

  • now():获取当前的日期时间

  • of():根据指定的年、月、日、小时、分钟、秒等信息创建LocalDateTime实例

  • parse():将指定格式的字符串转换为LocalDateTime实例

  • format():将LocalDateTime实例格式化成指定格式的字符串

  • plusXXX():在日期时间上增加指定的年、月、日、小时、分钟、秒或毫秒

  • minusXXX():在日期时间上减少指定的年、月、日、小时、分钟、秒或毫秒

工具类如下:


public class LocalDateTimeUtil {

    /**
     * Date转换为LocalDateTime
     *
     * @param date 日期
     * @return LocalDateTime
     */
    public static LocalDateTime toLocalDateTime(Date date) {
        return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
    }

    /**
     * LocalDateTime转换为Date
     *
     * @param dateTime 日期时间
     * @return Date
     */
    public static Date toDate(LocalDateTime dateTime) {
        return Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
    }

    /**
     * 获取指定格式的指定时间
     *
     * @param dateTime 日期时间
     * @param pattern  指定格式
     * @return 指定格式的日期时间字符串
     */
    public static String formatTime(LocalDateTime dateTime, String pattern) {
        return dateTime.format(DateTimeFormatter.ofPattern(pattern));
    }

    /**
     * 获取指定格式的当前时间
     *
     * @param pattern 指定格式
     * @return 指定格式的当前时间日期字符串
     */
    public static String formatNow(String pattern) {
        return formatTime(LocalDateTime.now(), pattern);
    }

    /**
     * 判断dateTime1是否早于dateTime2
     *
     * @param dateTime1 日期时间1
     * @param dateTime2 日期时间2
     * @return 判断结果
     */
    public static boolean isBefore(LocalDateTime dateTime1, LocalDateTime dateTime2) {
        return dateTime1.isBefore(dateTime2);
    }

    /**
     * 判断dateTime1与dateTime2是否是同一时间
     *
     * @param dateTime1 日期时间1
     * @param dateTime2 日期时间2
     * @return 判断结果
     */
    public static boolean isEqual(LocalDateTime dateTime1, LocalDateTime dateTime2) {
        return dateTime1.isEqual(dateTime2);
    }

    /**
     * 判断dateTime1是否晚于dateTime2
     *
     * @param dateTime1 日期时间1
     * @param dateTime2 日期时间2
     * @return 判断结果
     */
    public static boolean isAfter(LocalDateTime dateTime1, LocalDateTime dateTime2) {
        return dateTime1.isAfter(dateTime2);
    }

    /**
     * 获取指定日期的毫秒
     *
     * @param dateTime 日期时间
     * @return 毫秒
     */
    public static Long getMilliByTime(LocalDateTime dateTime) {
        return dateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
    }

    /**
     * 获取指定日期的秒
     *
     * @param dateTime 日期时间
     * @return 秒
     */
    public static Long getSecondsByTime(LocalDateTime dateTime) {
        return dateTime.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();
    }

    /**
     * 日期加上一个数,根据field不同加不同值
     *
     * @param dateTime 日期时间
     * @param number   数值
     * @param field    单位
     * @return 已添加数值后的日期时间
     */
    public static LocalDateTime plus(LocalDateTime dateTime, long number, ChronoUnit field) {
        return dateTime.plus(number, field);
    }

    /**
     * 日期减去一个数,根据field不同减不同值
     *
     * @param dateTime 日期时间
     * @param number   数值
     * @param field    单位
     * @return 已减少数值后的日期时间
     */
    public static LocalDateTime minus(LocalDateTime dateTime, long number, ChronoUnit field) {
        return dateTime.minus(number, field);
    }

    /**
     * 获取两个日期的差
     *
     * @param startDateTime 开始时间
     * @param endDateTime   结束时间
     * @param field         单位
     * @return 两个日期之间的差值
     */
    public static long between(LocalDateTime startDateTime, LocalDateTime endDateTime, ChronoUnit field) {
        Period period = Period.between(LocalDate.from(startDateTime), LocalDate.from(endDateTime));
        if (field == ChronoUnit.YEARS) {
            return period.getYears();
        }
        if (field == ChronoUnit.MONTHS) {
            return period.getYears() * 12 + period.getMonths();
        }
        return field.between(startDateTime, endDateTime);
    }

    /**
     * 获取某天的开始时间,例如:yyyy,MM,dd 00:00
     *
     * @param dateTime 某天的日期时间
     * @return 某天的开始时间
     */
    public static LocalDateTime getDayStart(LocalDateTime dateTime) {
        return dateTime.withHour(0)
                .withMinute(0)
                .withSecond(0)
                .withNano(0);
    }

    /**
     * 获取某天的结束时间,例如:yyy,MM,dd 23:59:59
     *
     * @param dateTime 某天的日期时间
     * @return 某天的结束时间
     */
    public static LocalDateTime getDayEnd(LocalDateTime dateTime) {
        return dateTime.withHour(23)
                .withMinute(59)
                .withSecond(59);
    }
}

这段代码是一个工具类,用来进行日期时间的转换和格式化,主要应用于需要处理不带时区的日期时间的场景,如日志记录、时间计算、定时任务等。它比旧版的Date和Calendar类更加方便和易用,并且提供了更多的方法供开发者使用。

你可能感兴趣的:(java开发,java,数据结构,开发语言)