gpt4 book ai didi

java - 在java中将UTC日期和时间添加到数据库

转载 作者:行者123 更新时间:2023-11-29 07:21:17 25 4
gpt4 key购买 nike

我想将 UTC 日期和时间作为时间戳添加到我的 mysql 数据库中。以前我尝试使用 SimpleDateFormat 作为:

        //UTC based issued date and expiry date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
final String currentUtc= sdf.format(new Date());
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date currentDate = (Date) simpleDateFormat.parse(currentUtc); //java.util.date

它有效,但我发现不推荐使用 SimpleDateFormat。所以现在我使用 Instant date time api 作为:

 Instant currentInstant = Instant.now().truncatedTo(ChronoUnit.SECONDS); //gives UTC datetime

这正确地给出了 UTC 的当前时间。问题是当我将这个瞬间添加到我的数据库时,它通过将我的 UTC 时间偏移量添加到我不想要的那个瞬间来转换为本地日期。

    //adding UTC time to database but not working
ps.setTimestamp(1, Timestamp.from(currentInstant));

那么如何在不向我的数据库添加 UTC 时间偏移的情况下添加 UTC 日期?提前谢谢你。

最佳答案

JDBC 4.2

    ps.setObject(1, currentInstant.atOffset(ZoneOffset.UTC));

从 JDBC 4.2 开始,我们可以直接将 java.time 对象传入和传出 JDBC 对象,例如 PreparedStatementResultSet。也许令人惊讶的是,我们不应再使用 setTimestamp 或类似的特定方法,而应仅使用 setObjectgetObject。通过这种方式,他们设法在不更改 API 规范的情况下添加了新功能(方法 setObjectgetObject 已经存在)。

一些 JDBC 驱动程序只接受 ps.setObject(1, currentInstant);,这是合乎逻辑的。我不记得 Connector/J for MySQL 是否有。在任何情况下,它都没有在 JDBC 标准中指定,它需要 OffsetDateTime 而不是 Instant。所以我会使用上面更长的形式,它转换为 OffsetDateTime,如果只是为了便携性的话。

恭喜您留下了 SimpleDateFormatDateTimestamp。他们有他们的时间,但总是设计得很糟糕,所以我同意不使用它们。

关于java - 在java中将UTC日期和时间添加到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56231254/

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