gpt4 book ai didi

java - 将第三方库的 LocalDateTime 转换为时间戳

转载 作者:行者123 更新时间:2023-11-30 05:38:37 27 4
gpt4 key购买 nike

我们正在使用org.thirteen.bp库来管理具有时区信息的不同格式。我已将字符串值及其格式解析为 LocalDateTime,但是有什么方法可以将 org.thirteen.bp.LocalDateTime 转换为 java.sql.Timestamp 吗?

最佳答案

is there any way to convert org.thirteen.bp.LocalDateTime to java.sql.Timestamp?

是:DateTimeUtils.toSqlTimestamp

DateTimeUtils类提供a conversion method .

LocalDateTime ldt = LocalDateTime.parse( "2019-01-23T01:23:45" ) ;
java.sql.Timestamp ts = org.threeten.bp.DateTimeUtils.toSqlTimestamp( ldt ) ;

…但是…

你应该知道存储 LocalDateTime通过使用 java.sql.Timestamp 对象是一个可怕的黑客行为。

LocalDateTime 不能表示时刻,但 Timestamp 可以。

问题在于 java.time 类和 JSR 310 之前随着时间的推移,Java 无法在没有时区或与 UTC 的偏移量的情况下表示日期和时间。因此,当时没有相当于 SQL 标准类型 TIMESTAMP WITHOUT TIME ZONE 的类。他们通过使用时间戳来伪造它。这是早期 Java 团队成员做出的众多糟糕的设计决策之一,他们显然不了解日期时间处理所涉及的问题。

更多解释请参见this Answer作者:Ole V.V.关于类似的问题。

当您最终迁移到 Java 8 或更高版本,并且可以从 ThreeTen-Backport 过渡到使用内置 java.time 类时,您可以完全避免使用java.sql.Timestamp

LocalDateTime ldt = LocalDateTime.parse( "2019-01-23T01:23:45" ) ;
myPreparedStatement.setObject( … , ldt ) ; // Appropriately storing a date and time-of-day without zone/offset into a database column of type TIMESTAMP WITHOUT TIME ZONE.

检索。

LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;

据推测,您正在使用 ThreeTen-Backport,因为您仍在使用 Java 6 或 Java 7。这意味着您没有 JDBC 4.2 或更高版本。因此,您必须使用本答案顶部的技巧。

Table of date-time types in Java (both modern & legacy) and in standard SQL.

关于java - 将第三方库的 LocalDateTime 转换为时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56157622/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com