Когато работите с PostgreSQL, понякога може да се окажете в ситуация, в която имате нужда от списък с часови зони, които Postgres разпознава.
Например, може да се опитвате да зададете часовата зона за текущата си сесия или може да използвате една от функциите за дата и час, които ви позволяват да манипулирате часовата зона.
По-долу са два изгледа и две функции, които връщат списък с часови зони.
Изгледът pg_timezone_abbrevs
pg_timezone_abbrevs
view предоставя списък на съкращенията на часовите зони, които в момента се разпознават от функциите за дата и час.
Ето как изглеждат първите 10 реда:
SELECT *
FROM pg_timezone_abbrevs
LIMIT 10;
Резултат:
abbrev | utc_offset | is_dst --------+------------+-------- ACDT | 10:30:00 | t ACSST | 10:30:00 | t ACST | 09:30:00 | f ACT | -05:00:00 | f ACWST | 08:45:00 | f ADT | -03:00:00 | t AEDT | 11:00:00 | t AESST | 11:00:00 | t AEST | 10:00:00 | f AFT | 04:30:00 | f
is_dst
колона показва дали това е съкращение за лятно часово време или не.
Имайте предвид, че съдържанието на този изглед се променя, когато timezone_abbreviations
параметърът на изпълнение е променен.
Също така имайте предвид, че документацията на Postgres гласи:
Докато повечето съкращения на часовите зони представляват фиксирани измествания спрямо UTC, има някои, които исторически са се различавали по стойност (вижте раздел B.4 за повече информация). В такива случаи този изглед представя тяхното текущо значение.
Функцията pg_timezone_abbrevs()
Като алтернатива можете да използвате pg_timezone_abbrevs()
функция за връщане на резултатите като SETOF.
SELECT pg_timezone_abbrevs()
LIMIT 10;
Резултат:
pg_timezone_abbrevs ------------------- (ACDT,10:30:00,t) (ACSST,10:30:00,t) (ACST,09:30:00,f) (ACT,-05:00:00,f) (ACWST,08:45:00,f) (ADT,-03:00:00,t) (AEDT,11:00:00,t) (AESST,11:00:00,t) (AEST,10:00:00,f) (AFT,04:30:00,f)
Можете също да използвате следния синтаксис, за да върнете резултатите в отделни колони, ако е необходимо.
SELECT *
FROM pg_timezone_abbrevs()
LIMIT 10;
Резултат:
abbrev | utc_offset | is_dst --------+------------+-------- ACDT | 10:30:00 | t ACSST | 10:30:00 | t ACST | 09:30:00 | f ACT | -05:00:00 | f ACWST | 08:45:00 | f ADT | -03:00:00 | t AEDT | 11:00:00 | t AESST | 11:00:00 | t AEST | 10:00:00 | f AFT | 04:30:00 | f
Изгледът pg_timezone_names
pg_timezone_names
view предоставя списък с имена на часови зони, които се разпознават от SET TIMEZONE
, заедно със свързаните им съкращения, UTC измествания и статус на лятното часово време.
Ето как изглеждат първите 10 реда:
SELECT *
FROM pg_timezone_names
LIMIT 10;
Резултат:
name | abbrev | utc_offset | is_dst ------------------+--------+------------+-------- Indian/Mauritius | +04 | 04:00:00 | f Indian/Chagos | +06 | 06:00:00 | f Indian/Mayotte | EAT | 03:00:00 | f Indian/Christmas | +07 | 07:00:00 | f Indian/Cocos | +0630 | 06:30:00 | f Indian/Maldives | +05 | 05:00:00 | f Indian/Comoro | EAT | 03:00:00 | f Indian/Reunion | +04 | 04:00:00 | f Indian/Mahe | +04 | 04:00:00 | f Indian/Kerguelen | +05 | 05:00:00 | f
is_dst
колоната показва дали часовата зона в момента спазва лятното часово време.
За този изглед документацията на Postgres гласи:
За разлика от съкращенията, показани в
pg_timezone_abbrevs
, много от тези имена предполагат набор от правила за преходна дата на лятно часово време. Следователно, свързаната информация се променя през местните граници на DST. Показаната информация се изчислява въз основа на текущата стойност наCURRENT_TIMESTAMP
.
Функцията pg_timezone_names()
Можете също да използвате pg_timezone_names()
функция за връщане на резултатите като SETOF.
SELECT pg_timezone_names()
LIMIT 10;
Резултат:
pg_timezone_names --------------------------------- (Indian/Mauritius,+04,04:00:00,f) (Indian/Chagos,+06,06:00:00,f) (Indian/Mayotte,EAT,03:00:00,f) (Indian/Christmas,+07,07:00:00,f) (Indian/Cocos,+0630,06:30:00,f) (Indian/Maldives,+05,05:00:00,f) (Indian/Comoro,EAT,03:00:00,f) (Indian/Reunion,+04,04:00:00,f) (Indian/Mahe,+04,04:00:00,f) (Indian/Kerguelen,+05,05:00:00,f)
Можете също да използвате следния синтаксис, за да върнете резултатите в отделни колони.
SELECT * FROM pg_timezone_names()
LIMIT 10;
Резултат:
name | abbrev | utc_offset | is_dst ------------------+--------+------------+-------- Indian/Mauritius | +04 | 04:00:00 | f Indian/Chagos | +06 | 06:00:00 | f Indian/Mayotte | EAT | 03:00:00 | f Indian/Christmas | +07 | 07:00:00 | f Indian/Cocos | +0630 | 06:30:00 | f Indian/Maldives | +05 | 05:00:00 | f Indian/Comoro | EAT | 03:00:00 | f Indian/Reunion | +04 | 04:00:00 | f Indian/Mahe | +04 | 04:00:00 | f Indian/Kerguelen | +05 | 05:00:00 | f