0
我想測試時區和時區與時區的差異。但我遇到了一些我不明白爲什麼它會這樣工作的東西。存儲/檢索帶時區或不帶時區的時間戳
我有以下設置:
CREATE TABLE tbl_test_timezones (
first_date timestamp with time zone,
second_date timestamp
)
我已經插入了一些TESTDATA:
insert into tbl_test_timezones (first_date, second_date) values (now(), now());
現在我想檢查這兩個領域之間的差異時,我做了選擇
select
first_date,
first_date at time zone 'Europe/Brussels' as first_date_wt,
second_date,
second_date at time zone 'Europe/Brussels' as second_date_wt
from tbl_test_timezones
which gives me the following result
first_date: 2016-10-03 07:03:16.63818+00
first_date_wt: 2016-10-03 09:03:16.63818
second_date: 2016-10-03 07:03:16.63818
second_date_wt: 2016-10-03 05:03:16.63818+00
問題1
我想知道爲什麼second_date_wt正在做-2而不是+2像first_date_wt?
問題2
比方說,我的應用程序商店與時區的時間戳和用戶想要得到一些記錄這個時間戳。您是否需要爲用戶輸入自己的時區來存儲某種用戶設置,並在檢索時將其包含在選擇查詢中?或者你更喜歡獲取它並在客戶端應用程序中執行時區內容?
例如:
select start_date at time zone (
select user_time_zone from tbl_user_settings where user_id = 2
)
from tbl_projects
或只做
select start_date
from tbl_projects
答案的第一個問題是一個簡單的方法來記住的區別,謝謝!也不知道你可以用SET關鍵字設置時區。大!但是當你的客戶位於不同的時區時,你會做什麼?你是否總是對每個查詢執行SET TIMEZONE = xxxxx? – koala
如果一個會話需要在不同時區(如連接池中)爲客戶提供服務,則每次切換客戶時都必須設置時區。但是如果您在應用程序代碼中處理時區,則必須在應用程序中執行相同的操作,對嗎? –
在我的情況下,我有一個REST API,客戶端也可以連接。因此,如果我將時間戳存儲爲「帶時區的時區」並獲取數據,則只需將客戶端應用程序設置爲正確的時區以顯示正確的時間,對不對?不需要我的後端知道最終用戶在哪個時區? – koala