为什么java.sql的Timestap.of()与java.time的LocalDateTime解析不正确?

问题描述 投票:0回答:1

我遇到了 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 sql java-time sql-timestamp
1个回答
0
投票

避免

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。

您可能会看到由于整数溢出而导致的环绕效果。

© www.soinside.com 2019 - 2024. All rights reserved.