簡體   English   中英

如何在UTC中生成java.sql.Timestamp以進行查詢比較?

[英]How to generate a java.sql.Timestamp in UTC for a query comparison?

我目前正在使用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中生成時間戳的答案,包括在此處創建時間戳的代碼是

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值,然后進行比較。 因此,您可能不需要轉換時間。 它應該按原樣工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM