gpt4 book ai didi

java - 如何生成 UTC 格式的 java.sql.Timestamp 用于查询比较?

转载 作者:行者123 更新时间:2023-12-02 03:51:05 25 4
gpt4 key购买 nike

我目前正在使用 Spring-Boot 构建一个网关,从 PSQL 数据库读取数据。 PSQL 数据库 v11.3 由运行 Rails 5.1.3 的 Rails Web 应用程序填充。 Spring 应用程序使用 Java 8 和 Spring Data JPA。

相关查询由 Spring 应用程序中的计划方法运行,该方法将当前时间与表的 updated_at 时间进行比较。查询如下:

@Query("SELECT d from SimulatedDeviceEntity d WHERE d.updatedAt > :currentTime")
List<SimulatedDeviceEntity> findByLastUpdated(@Param("currentTime") Timestamp currentTime);

如果我从此查询中检索 SimulatedDeviceEntity 并从 getUpdatedAt 获取其时间,则它的类型为 java.sql.Timestamp。当使用 toString() 显示时,我得到在我的本地时间 13:24< 更新的设备的 2019-06-26 17:24:20.034923/.

我已经尝试了有关如何在 UTC 中生成时间戳的各种答案,包括 here我创建时间戳的代码在哪里

LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime zdt = ZonedDateTime.of(ldt, ZoneId.of("GMT"));
Timestamp currentTime = Timestamp.valueOf(zdt.toLocalDateTime());

无论我尝试什么,对其中任何一个调用 toString 都会以我的本地时间生成时间戳,比 UTC 晚 4 小时。我开始明白这是故意的,但是当对从 Rails 应用程序检索的时间戳调用 toString 时,即使它们显示为 UTC。鉴于 toString 应显示本地时间的时间戳,事实上它以 UTC 显示我的 last_updated 时间,这让我相信这里还有其他东西在起作用。

最佳答案

实际上,当您比较两个时间戳时,您不需要将它们转换为同一时区。它足够聪明,可以将它们作为绝对时间进行比较。它的作用是将任何 Timestamp 转换为自 1.1.1970 00:00 UTC 以来经过的 Long 毫秒值,然后对它们进行比较。所以你可能不需要转换你的时间。它应该按原样工作。

关于java - 如何生成 UTC 格式的 java.sql.Timestamp 用于查询比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56779227/

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