2013-08-18 75 views
0

我有一個應用程序,其目標是在格式爲GMT格式的數據庫中包含所有時間戳,如果這些時間戳創建時沒有像這樣的時區update_ts timestamp without time zone或者更安全/更好或者創建一個不好的主意沒有時區的時間戳。什麼時候應該創建沒有時區的PostgreSQL時間戳?

回答

9

我有一個應用程序,其目的是讓在databes所有時間戳GMT格式

在這種情況下timestamp with time zonetimestamptz)是你想要什麼,儘管時間戳的坦白愚蠢的命名SQL中的類型。

「帶時區的時間戳」實際上是「時間戳存儲在utc中並在輸入/輸出上轉換」。

「沒有時區的時間戳」是「沒有時區轉換的時間戳存儲和檢索」。

如果您將「帶/不帶時區」閱讀爲「帶/不帶時區轉換」,則這些類型會更有意義。

儘管他們的名字,這兩種類型實際上存儲的時區。沒有SQL類型的「時區時間戳」實際上應該是什麼,這是本地時間存儲明確指示tz偏移量和時區所在的時區(一個簡單的UTC偏移不是由於DST轉換周圍的不明確性,這足夠好了)。

如果您希望以UTC做所有事情,請使用timestamptz並將服務器TimeZone設置爲UTC。這樣希望本地時間轉換的應用程序仍然可以通過設置TimeZone得到它。

+0

直接點和這些數據類型真正的最好的解釋之一。我記得花費了大量的時間搜索和閱讀文檔,以便在時間戳內查找時區存儲,只是發現沒有。 –

+0

@MarceloZabani是的。 SQL委員會經常會提出...創意...想法,但時間戳處理必須在最特殊的情況下才會到達AT TIME ZONE僞操作符,它以微妙的方式改變行爲基於輸入類型,與'TIME'輸入等不同。 –

相關問題