我遇到了 java.sql 的错误
Timestamp.valueOf(LocalDateTime.MIN())
转换不正确。
鉴于 java.time 的
LocalDateTime.MIN() = -999999999-01-01T00:00:00
但是当我尝试将其转换为 SQL 友好的时间戳时,为什么我会遇到错误解析的不同时间?
Timestamp.valueOf(LocalDateTime.MIN()) = +169087565-03-15 04:51:43.000000
我期待尽可能最早的日期,但这给出了MAX。
PS:
我使用
解决了这个问题Timestamp.valueOf(//
LocalDateTime.of(LocalDate.ofYearDay(1800,1), LocalTime.MIDNIGHT)
避免
java.time.Timestamp
你说:
SQL 友好的时间戳
java.time.Timestamp
类是存在严重缺陷的遗留日期时间类之一,多年前已被 JSR 310 中定义的现代 java.time 类取代。
JDBC 4.2 及更高版本要求每个 JDBC 驱动程序都支持 java.time。具体来说,使用
OffsetDateTime
而不是 Timestamp
。
本地日期时间
LocalDateTime
类无法表示时刻,因为它缺少时区上下文或与 UTC 的偏移量。 LocalDateTime
类仅代表日期和时间,仅此而已。
传统类型
Timestamp
和现代类型OffsetDateTime
都代表一个时刻,时间轴上的一个点。所以你不应该将 LocalDateTime
与这些混合在一起。
.MIN
避免使用最小值/最大值的极端值。数据库系统的局限性各不相同。我所知道的所有范围都比 java.time.
小得多我期待尽可能最早的日期,但这给出了 MAX。
您可能会看到由于整数溢出而导致的环绕效果。