簡體   English   中英

使用jdbc從PostgreSQL查詢時間列

[英]Query time column from postgresql using jdbc

我使用的是PostgreSQL 8.4 ,服務器是linux,而linux的時區is'EDT ' is'EDT '而不是' UTC '。 PostgreSQL的配置使數據庫的時區為“ UTC”。 該代碼在JBoss9上運行。

我有一個SQL, select to_char(ts_entry.submitted_date, 'MM/DD/YYYY HH24:MM') as submitted_date_format from ts_entry where ....

如果我們在PostgreSQL中運行sql,則將獲得值“ 07/10/2017 02:07

但是當我嘗試從java中的resultSet獲取值時,

Statement st = connection.createStatement(); 
ResultSet rs = st.executeQuery(sql); 
String value = rs.getString("submitted_date_format");

該值將為“ 07/09/2017 22:07 ”。 DB中的原始值為“ 2017-07-10 02:02:25.268+00 ”。

如何在代碼級別處理由linux服務器的時區引起的影響?

順便說一句,我知道一個替代解決方案,更改jboss的啟動腳本,以使jboss使用時區“ UTC”啟動。 可以在代碼級別處理此問題嗎?

數據庫服務器計算機的時區對行為沒有直接影響,除了它用於初始化postgresql.conf timezone (這是客戶端時區的初始設置,除非被數據庫會話覆蓋)。

PostgreSQL在內部將timestamp with time zone存儲在UTC中,並在交付時將其轉換為客戶端的本地時區。

因此,您應該按照需要的方式設置數據庫會話時區

SET TIME ZONE '<time zone name>';

當您從PostgreSQL中選擇日期時,會將日期轉換為該時區。

暫無
暫無

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

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