[英]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.