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自己转换,转换细节如图所示

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值