PostgreSQL 可以接受依照 TZ
環境變數的POSIXPOSIX 標準規則編寫的時區規範。POSIXPOSIX 時區規範不足以應對真實世界時區歷史的複雜性,但有時有理由使用它們。
POSIX 時區規範具有以下形式:
STD
offset
[DST
[dstoffset
] [ ,rule
] ]
(為了方便閱讀,我們在欄位之間顯示空格,但實際上不應使用空格。) 欄位如下:
STD
是用於標準時間的時區縮寫。
offset
是時區的標準時間與 UTC 的偏移量。
DST
是用於日光節約時間的時區縮寫。 如果省略此欄位和後面的欄位,則該時區使用固定的 UTC 偏移量,沒有日光節約規則。
dstoffset
是日光節約時間與 UTC 的偏移量。 通常省略此欄位,因為它預設比標準時間 offset
少一小時,這通常是正確的。
rule
定義了日光節約時間生效的規則,如下所述。
在此語法中,時區縮寫可以是字母字串,例如 EST
,也可以是用角括號括起來的任意字串,例如 <UTC-05>
。 請注意,此處給出的時區縮寫僅用於輸出,甚至僅在某些時間戳記輸出格式中才使用。 時間戳記輸入中識別的時區縮寫,如 第 B.4 節中所述。
偏移量欄位指定與 UTC 的小時數,以及可選的分鐘數和秒數差。 它們的格式為 hh
[:
mm
[:
ss
]],可選擇帶有前導符號(+
或 -
)。 正號用於格林威治以西的時區。 (請注意,這與 PostgreSQL 中其他地方使用的 ISO-8601 符號約定相反。) hh
可以有一位或兩位數字; mm
和 ss
(如果使用)必須有兩位數字。
日光節約時間轉換 rule
的格式如下:
dstdate
[/
dsttime
],
stddate
[/
stdtime
]
(與之前一樣,實際上不應包含空格。) dstdate
和 dsttime
欄位定義日光節約時間何時開始,而 stddate
和 stdtime
欄位定義標準時間何時開始。 (在某些情況下,尤其是在赤道以南的時區中,前者可能比一年中的後者晚。) 日期欄位具有以下格式之一:
n
純整數表示一年中的某一天,從 0 計數到 364,或在閏年中計數到 365。
J
n
在此格式中,n
從 1 計數到 365,即使存在 2 月 29 日也不計數。 (因此,無法以這種方式指定 2 月 29 日發生的轉換。但是,2 月之後的日期具有相同的數字,無論是否為閏年,因此對於固定日期的轉換,這種形式通常比純整數形式更有用。)
M
m
.
n
.
d
此形式指定始終在同一個月和同一星期幾發生的轉換。 m
識別月份,從 1 到 12。 n
指定由 d
識別的星期幾的第 n
次出現。 n
是介於 1 和 4 之間的數字,或 5 表示該月中該星期幾的最後一次出現(可能是第四次或第五次)。 d
是介於 0 和 6 之間的數字,其中 0 表示星期日。 例如,M3.2.0
表示「3 月的第二個星期日」。
M
格式足以描述許多常見的日光節約時間轉換規則。 但請注意,這些變體都無法處理日光節約時間法規的變更,因此在實踐中,有必要使用為命名時區儲存的歷史資料(在 IANA 時區資料庫中)來正確解釋過去的時間戳記。
轉換規則中的時間欄位的格式與先前描述的偏移量欄位相同,只是它們不能包含符號。 它們定義了更改為另一個時間發生的當前本地時間。 如果省略,它們預設為 02:00:00
。
如果給定了日光節約時間的縮寫,但省略了轉換rule
欄位,則預設行為是使用規則M3.2.0,M11.1.0
,這對應於截至 2020 年的美國慣例(也就是說,三月的第二個星期日向前撥快,十一月的第一個星期日向後撥慢,這兩個轉換都發生在凌晨 2 點的當地時間)。請注意,此規則無法提供 2007 年之前的美國正確的轉換日期。
例如,CET-1CEST,M3.5.0,M10.5.0/3
描述了巴黎目前(截至 2020 年)的時間記錄慣例。此規範表示標準時間的縮寫是CET
,比 UTC 快(東)一小時;日光節約時間的縮寫是CEST
,隱含地比 UTC 快兩小時;日光節約時間在三月的最後一個星期日的凌晨 2 點 CET 開始,並在十月的最後一個星期日的凌晨 3 點 CEST 結束。
四個時區名稱EST5EDT
、CST6CDT
、MST7MDT
和PST8PDT
看起來像是 POSIX 時區規範。但是,它們實際上被視為命名的時區,因為(由於歷史原因)IANA 時區資料庫中存在這些名稱的文件。這在實務上的含義是,即使普通的 POSIX 規範無法產生有效的歷史美國日光節約時間轉換,這些時區名稱也會產生有效轉換。
應該注意,很容易拼錯 POSIX 風格的時區規範,因為沒有檢查時區縮寫的合理性。例如,SET TIMEZONE TO FOOBAR0
將會有效,導致系統有效地使用一個相當奇特的 UTC 縮寫。
如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單來報告文件問題。