网站首页 > java教程 正文
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自己转换,转换细节如图所示
猜你喜欢
- 2024-09-19 带有时区的字符怎样转换为时间及Java 8中日期 与 Calendar 转换
- 2024-09-19 MySQL时间戳精度问题引发的血案(mysql时间戳用什么类型)
- 2024-09-19 一文彻底搞懂 CAS 实现原理(cas如何实现)
- 2024-09-19 java8日期处理,收藏起来,工作会用到
- 2024-09-19 java 8 新特性 日期和时间 API(java时间戳转换为日期格式)
- 2024-09-19 java8的时间和`Date`的对比(b/l date是什么时间)
- 2024-09-19 Spark Streaming 从指定时间戳开始消费 kafka 数据
- 2024-09-19 xk-time 1.1.1 发布,Java 时间工具包
- 2024-09-19 必知必会的操作Jmeter(十二)_打印时间戳
- 2024-09-19 日期时间--JAVA成长之路(java的日期类)
你 发表评论:
欢迎- 最近发表
-
- class版本不兼容错误原因分析(class更新)
- 甲骨文Oracle公司为Java的最新LTS版本做出改进
- 「版本发布」Minecraft Java开发版 1.19.4-pre1 发布
- java svn版本管理工具(svn软件版本管理)
- 我的世界1.8.10钻石在第几层(我的世界1.7.2钻石在哪层)
- Java开发高手必备:在电脑上轻松切换多个JDK版本
- 2022 年 Java 开发报告:Java 8 八年不到,开发者都在用什么?
- 开发java项目,选择哪个版本的JDK比较合适?
- Java版本选型终极指南:8 vs 17 vs 21特性对决!大龄程序员踩坑总结
- POI Excel导入(poi excel导入附件)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)