• JAVA8时间工具类转换


    JAVA8时间工具类转换

    在JDK1.8以前时间工具类一般都是Date、Calendar、SimpleDateFormat等,这些工具类使用相对繁琐,而且线程不安全,所以在JDK1.8对日期类做了重新规划,解决工具类线程不安全问题,而且提升了性能,部分工具类展示如下。

    • LocalDate:本地日期,不包含具体时间,所以时间格式为yyyy-MM-dd。

    • LocalTime:本地时间,不包含日期。

    • LocalDateTime:组合了日期和时间,但不包含时差和时区信息。

    • ZonedDateTime:最完整的日期时间,包含时区和相对UTC或格林威治的时差。

    在我们开发过程中或多或少都会遇到需要兼容之前的旧代码,所以这篇文章主要记录这些工具类之间的相互转换。

    LocalDateTime转LocalDate、转LocalTime

    LocalDateTime工具类中包含了时间和日期,所以这个转换相对简单。

    // LocalDateTime转LocalDate、转LocalTime
    LocalDateTime localDateTime1 = LocalDateTime.now();
    LocalDate localDate1 = localDateTime1.toLocalDate();
    LocalTime localTime1 = localDateTime1.toLocalTime();
    
    

    LocalDateTime转Date

    LocalDateTime不能直接转换为Date对象,需要通过桥梁ZonedDateTime,也就是带了时区的日期类,这里的转换涉及到两个类

    • ZoneId:时区类。

    • Instant:记录瞬时时间,也就是时间戳(类似于System.currentTimeMillis()方法)。

    // LocalDateTime转Date
    // 将localDateTime1先转换为带时区的工具类ZonedDateTime(需要指定时区,一般采用系统默认时区即可)
    ZonedDateTime zonedDateTime = localDateTime1.atZone(ZoneId.systemDefault());
    // 将时区时间工具类,转换为时间戳
    Instant instant = zonedDateTime.toInstant();
    Date date = Date.from(instant);
    
    

    LocalDate、LocalTime转LocalDateTime

    LocalDate和LocalTime其实都是残缺的时间类(缺少时间或者日期),所以在转换为完整时间时需要将缺少的时间或日期补全。

    // LocalDate转LocalDateTime
    LocalDate localDate2 = LocalDate.now();
    // 补齐时、分、秒
    LocalDateTime localDateTime3 = localDate2.atTime(10, 10, 10);
    
    // LocalTime转LocalDateTime
    LocalTime localTime4 = LocalTime.now();
    // 补齐年、月、日
    LocalDateTime localDateTime2 = localTime4.atDate(localDate2);
    
    

    LocalDate转Date

    LocalDate转Date日期同样需要借助ZonedDateTime类

    // LocalDate转Date
    LocalDate localDate3 = LocalDate.now();
    ZonedDateTime zonedDateTime1 = localDate3.atStartOfDay(ZoneId.systemDefault());
    Instant instant1 = zonedDateTime1.toInstant();
    Date date1 = Date.from(instant1);
    
    

    Date转LocalDate、LocalDateTime、LocalTime

    Date转JAVA8相关时间工具类全部以ZonedDateTime为媒介即可,这里转换相当于LocalDateTime转Date对象的一个逆向过程

    // Date转LocalDate
    Date date2 = new Date();
    Instant instant2 = date2.toInstant();
    ZonedDateTime zonedDateTime2 = instant2.atZone(ZoneId.systemDefault());
    LocalDate localDate = zonedDateTime2.toLocalDate();
    
    // Date转LocalDateTime
    LocalDateTime localDateTime = zonedDateTime2.toLocalDateTime();
    
    // Date转LocalTime
    LocalTime localTime = zonedDateTime2.toLocalTime();
    
    

    总结

    转换过程总结起来相对简单,Date类和JDK1.8推出的LocalDate、LocalDateTime、LocalTime类之间的转换可以通过ZonedDateTime做桥梁,至于JDK1.8新出的类就可以通过API自己转换,转换细节如图所示

  • 相关阅读:
    Nvidia Jetson平台 JP4.2.1版本GStreamer视频采集异常问题调试记录
    基于交叉算子和非均匀变异算子的飞蛾扑火优化算法-附代码
    一个技术混子参加《 2022 谷歌开发者大会》的一日游记
    [深入研究4G/5G/6G专题-48]: 5G Link Adaption链路自适应-4-下行链路自适应DLLA-PDCCH信道
    【测试沉思录】18.如何测试微信小程序?
    深度学习(生成式模型)——DDPM:denoising diffusion probabilistic models
    MyBatis关系映射
    【密码学】第二章 密码学的基本概念
    Abp 项目报错 Microsoft.Data.SqlClient.SqlException (0x80131904)
    百度地图API使用指南 - Javascript API | JavaScript API GL | JavaScript API Lite
  • 原文地址:https://blog.csdn.net/zzf1233/article/details/127102123