zoukankan      html  css  js  c++  java
  • java8时间工具类Localdate、LocaldateTime

    优点:

    1.方便。

    Date 只能是日期加时间的格式,而 LocalDate 、LocalTime、LocalDateTime 

    分别代表日期,时间,日期+时间,非常灵活。再就是后者在日期计算及格式化方面非常简单易用,而Date要繁琐很多。

    2.线程安全。

    传统时间类不支持多线程安全。

    缺点<目前发现的坑>:

    1.在比较日期相隔天数时,不要使用Period.between()方法,这个只是当月相隔天数。其实就是:a月b日  -  c月d日  =   (b-d)日

    LocalDateTime:

    他的toString()方法,不同其他类,中间有个T。可使用@JsonFormat注解,格式化需要的格式后转成json。前端展示就会显示对应的格式,当然,debug调试的时候,还是会显示T的。

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Override
        public String toString() {
            return date.toString() + 'T' + time.toString();
        }

    注意:

    比较时,会需要传接口Temporal作为参数,可用它的实现类,比如localDateTime即可。

    如果比较相隔的时、分、毫秒时,需要将格式转成精确到小时以后<相隔的时、分、秒都可以只格式化到小时yyyy-MM-dd HH即可不报错>

    附工具类代码:

    public class DateUtil {
    
        public static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HHmmss");
        public static final DateTimeFormatter MONTH_FORMATTER = DateTimeFormatter.ofPattern("yyyyMM");
        public static final DateTimeFormatter SHORT_DATE_FORMATTER = DateTimeFormatter.ofPattern("yyMMdd");
        public static final DateTimeFormatter SHORT_DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyMMddHHmmss");
        public static final DateTimeFormatter DATETIME_FORMATTER =  DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
        public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd");
    
        /**
         * 返回当前的日期
         * @return
         */
        public static LocalDate getCurrentLocalDate() {
            return LocalDate.now();
        }
    
        /**
         * 返回当前时间
         * @return
         */
        public static LocalTime getCurrentLocalTime() {
            return LocalTime.now();
        }
    
        /**
         * 返回当前日期时间
         * @return
         */
        public static LocalDateTime getCurrentLocalDateTime() {
            return LocalDateTime.now();
        }
    
        /**
         * yyyyMMdd
         *
         * @return
         */
        public static String getCurrentDateStr() {
            return LocalDate.now().format(DATE_FORMATTER);
        }
    
        /**
         * yyMMdd
         *
         * @return
         */
        public static String getCurrentShortDateStr() {
            return LocalDate.now().format(SHORT_DATE_FORMATTER);
        }
    
        public static String getCurrentMonthStr() {
            return LocalDate.now().format(MONTH_FORMATTER);
        }
    
        /**
         * yyyyMMddHHmmss
         * @return
         */
        public static String getCurrentDateTimeStr() {
            return LocalDateTime.now().format(DATETIME_FORMATTER);
        }
    
        /**
         * yyMMddHHmmss
         * @return
         */
        public static String getCurrentShortDateTimeStr() {
            return LocalDateTime.now().format(SHORT_DATETIME_FORMATTER);
        }
    
        /**
         * HHmmss
         * @return
         */
        public static String getCurrentTimeStr() {
            return LocalTime.now().format(TIME_FORMATTER);
        }
    
        public static String getCurrentDateStr(String pattern) {
            return LocalDate.now().format(DateTimeFormatter.ofPattern(pattern));
        }
    
        public static String getCurrentDateTimeStr(String pattern) {
            return LocalDateTime.now().format(DateTimeFormatter.ofPattern(pattern));
        }
    
        public static String getCurrentTimeStr(String pattern) {
            return LocalTime.now().format(DateTimeFormatter.ofPattern(pattern));
        }
    
        public static LocalDate parseLocalDate(String dateStr, String pattern) {
            return LocalDate.parse(dateStr, DateTimeFormatter.ofPattern(pattern));
        }
    
        public static LocalDateTime parseLocalDateTime(String dateTimeStr, String pattern) {
            return LocalDateTime.parse(dateTimeStr, DateTimeFormatter.ofPattern(pattern));
        }
    
        public static LocalTime parseLocalTime(String timeStr, String pattern) {
            return LocalTime.parse(timeStr, DateTimeFormatter.ofPattern(pattern));
        }
    
        public static String formatLocalDate(LocalDate date, String pattern) {
            return date.format(DateTimeFormatter.ofPattern(pattern));
        }
    
        public static String formatLocalDateTime(LocalDateTime datetime, String pattern) {
            return datetime.format(DateTimeFormatter.ofPattern(pattern));
        }
    
        public static String formatLocalTime(LocalTime time, String pattern) {
            return time.format(DateTimeFormatter.ofPattern(pattern));
        }
    
        public static LocalDate parseLocalDate(String dateStr) {
            return LocalDate.parse(dateStr, DATE_FORMATTER);
        }
    
        public static LocalDateTime parseLocalDateTime(String dateTimeStr) {
            return LocalDateTime.parse(dateTimeStr, DATETIME_FORMATTER);
        }
    
        public static LocalTime parseLocalTime(String timeStr) {
            return LocalTime.parse(timeStr, TIME_FORMATTER);
        }
    
        public static String formatLocalDate(LocalDate date) {
            return date.format(DATE_FORMATTER);
        }
    
        public static String formatLocalDateTime(LocalDateTime datetime) {
            return datetime.format(DATETIME_FORMATTER);
        }
    
        public static String formatLocalTime(LocalTime time) {
            return time.format(TIME_FORMATTER);
        }
    
        /**
         * 日期相隔天数
         * @param startDateInclusive
         * @param endDateExclusive
         * @return
         */
        public static long periodDays(LocalDate startDateInclusive, LocalDate endDateExclusive) {
            return endDateExclusive.toEpochDay() - startDateInclusive.toEpochDay();
        }
    
        /**
         * 日期相隔小时
         * @param startInclusive
         * @param endExclusive
         * @return
         */
        public static long durationHours(Temporal startInclusive, Temporal endExclusive) {
            return Duration.between(startInclusive, endExclusive).toHours();
        }
    
        /**
         * 日期相隔分钟
         * @param startInclusive
         * @param endExclusive
         * @return
         */
        public static long durationMinutes(Temporal startInclusive, Temporal endExclusive) {
            return Duration.between(startInclusive, endExclusive).toMinutes();
        }
    
        /**
         * 日期相隔毫秒数
         * @param startInclusive
         * @param endExclusive
         * @return
         */
        public static long durationMillis(Temporal startInclusive, Temporal endExclusive) {
            return Duration.between(startInclusive, endExclusive).toMillis();
        }
    
        /**
         * 是否当天
         * @param date
         * @return
         */
        public static boolean isToday(LocalDate date) {
            return getCurrentLocalDate().equals(date);
        }
    
        /**
         * 获取此日期时间与默认时区<Asia/Shanghai>组合的时间毫秒数
         * @param dateTime
         * @return
         */
        public static Long toEpochMilli(LocalDateTime dateTime) {
            return dateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
        }
    
        /**
         * 获取此日期时间与指定时区组合的时间毫秒数
         * @param dateTime
         * @return
         */
        public static Long toSelectEpochMilli(LocalDateTime dateTime, ZoneId zoneId) {
            return dateTime.atZone(zoneId).toInstant().toEpochMilli();
        }
    }
    菜鸟码农,喜欢和谦虚爱学习积极向上的同学做朋友,请留言多指教。
  • 相关阅读:
    结构化思考力
    对象序列化解析
    单元测试的规范
    关于CefSharp的坎坷之路
    构建基于Chromium的应用程序
    C# 面向切面编程(AOP)--监控日志记录方案
    CefSharp 中断点 已达到中断点
    用批处理命令实现激活office2016
    Winform开发中的困境及解决方案
    VUE+Element 前端应用开发框架功能介绍
  • 原文地址:https://www.cnblogs.com/luoliuniankk/p/9878070.html
Copyright © 2011-2022 走看看