日期不要再用Date了,使用LocalDateTime和Instant!

看了java8实战一书,觉得表示时间以前用java.sql.Date的字段属性应该可以用LocalDateTime来代替
所以在项目中实验了一下:
在这里插入图片描述更换过后,启动果然报错:

java.sql.SQLFeatureNotSupportedException
; null; nested exception is java.sql.SQLFeatureNotSupportedException] with root cause

使用百度大法之后,调高连接池版本得到解决
原来是1.1.10
在这里插入图片描述以后实体类字段属性就可以使用LocalDateTime了

在这里插入图片描述另外java8中的Instant类代表时刻,也可以代替遗留类java.sql.timestamp
另外附上java核心技术卷2中的转换关系

在这里插入图片描述
在这里插入图片描述

### 使用 `LocalDateTime` 而不是 `Date` 的原因 在现代 Java 应用程序中推荐使用 `java.time.LocalDateTime` 来代替传统的 `java.util.Date` `java.sql.Timestamp` 类型,主要原因是前者提供了更清晰的时间处理方式并解决了旧类中存在的许多问题。 #### 更好的 API 设计 `LocalDateTime` 是不可变对象,并且其方法设计更加直观易懂。相比之下,`Date` 可能会带来一些混淆的概念,比如它既代表时间戳又可以用于表示日期[^1]。 #### 高度可读性灵活性 `LocalDateTime` 提供了丰富的操作接口来获取年份、月份、日等具体部分;而 `Date` 则依赖于过时的方法如 `getYear()` 或者通过 `Calendar` 对象间接访问这些信息,这增加了复杂度并且容易出错。 #### 改进了线程安全性 由于 `LocalDateTime` 不允许修改实例状态(即它是不可变的),因此天生具备更好的线程安全特性,在多线程环境中表现更为稳定可靠。 --- ### 如何正确地进行转换使用 为了实现从 `Date` 向 `LocalDateTime` 的迁移,可以通过以下几种方式进行: #### 将 `Date` 转换为 `LocalDateTime` 当需要将现有的基于 `Date` 的逻辑迁移到新的时间API时,可以利用 `Instant` 中间件作为桥梁完成这一过程: ```java import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; // 假设有一个 Date 实例 dateInstance Date dateInstance = new Date(); Instant instant = dateInstance.toInstant(); // Convert from Date to Instant LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); ``` 这段代码展示了如何先将 `Date` 转换成 `Instant` ,再进一步指定时区将其映射到本地时间线上的某个确切位置上形成 `LocalDateTime` 。这里选择了默认系统所在的时区 (`ZoneId.systemDefault()`) 进行转换。 #### 将 `LocalDateTime` 转换回 `Date` 如果项目仍然存在某些地方需要用到 `Date` 类型,则可通过相反的过程来进行反向转换: ```java import java.util.Date; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; // 给定一个 LocalDateTime 实例 localDateTimeInstance LocalDateTime localDateTimeInstance = LocalDateTime.now(); Instant instant = localDateTimeInstance.atZone(ZoneId.systemDefault()).toInstant(); Date dateFromLocalDateTime = Date.from(instant); ``` 此片段说明了怎样把 `LocalDateTime` 映射成带有特定时区偏移量的瞬间(`Instant`),然后再创建对应的 `Date` 对象。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值