Cách xem thông tin các timezone hợp lệ trong PostgreSQL

Chào các bác,

Gần đây tôi mới làm việc với PostgreSQL và hệ quản trị này sử dụng timezone bằng cách viết tắt. Để xem thông tin chi tiết về các timezone được hỗ trợ trong PostgreSQL các bác có thể dùng query sau:

select * from pg_timezone_names;

Kết quả của query này trả về tên của timezone và cách viết tắt có thể sử dụng được khi các bác viết query:

               name               | abbrev | utc_offset | is_dst
----------------------------------+--------+------------+--------
 Kwajalein                        | +12    | 12:00:00   | f
 UTC                              | UTC    | 00:00:00   | f
 Cuba                             | CDT    | -04:00:00  | t
 Eire                             | GMT    | 00:00:00   | t
 GMT+0                            | GMT    | 00:00:00   | f
 Brazil/DeNoronha                 | -02    | -02:00:00  | f
 Brazil/West                      | -04    | -04:00:00  | f
 Brazil/East                      | -03    | -03:00:00  | f
 Brazil/Acre                      | -05    | -05:00:00  | f
 NZ                               | NZDT   | 13:00:00   | t
 ROC                              | CST    | 08:00:00   | f
 Poland                           | CET    | 01:00:00   | f
 Libya                            | EET    | 02:00:00   | f
 GMT                              | GMT    | 00:00:00   | f
 CET                              | CET    | 01:00:00   | f
 MST7MDT                          | MDT    | -06:00:00  | t
 Zulu                             | UTC    | 00:00:00   | f
 EST5EDT                          | EDT    | -04:00:00  | t
 Egypt                            | EET    | 02:00:00   | f
 MET                              | MET    | 01:00:00   | f
 UCT                              | UTC    | 00:00:00   | f
 HST                              | HST    | -10:00:00  | f
 Arctic/Longyearbyen              | CET    | 01:00:00   | f
 Atlantic/Faroe                   | WET    | 00:00:00   | f
 Atlantic/Bermuda                 | ADT    | -03:00:00  | t
 Atlantic/Azores                  | -01    | -01:00:00  | f
 Atlantic/South_Georgia           | -02    | -02:00:00  | f

...

Kết quả trả về sẽ nhiều hơn mô tả ở trên, nhưng khi query ta biết được ngay cách viết tắt của timezone nào là hợp lệ để tránh lỗi "pq: time zone "{timezone}" not recognized".

Một bảng khác cấp thông tin tốt hơn nữa là pg_timezone_abbrevs. Bảng này chỉ liệt kê các timezone viết tắt được hỗ trợ và thời gian chênh lệch.

select * from pg_timezone_abbrevs;

Kết quả trả ra sẽ là:

abbrev|utc_offset|is_dst|
------+----------+------+
AZOT  | -01:00:00|false |
EGT   | -01:00:00|false |
FNST  | -01:00:00|true  |
BRST  | -02:00:00|true  |
FNT   | -02:00:00|false |
PMDT  | -02:00:00|true  |
UYST  | -02:00:00|true  |
WGST  | -02:00:00|true  |
NDT   | -02:30:00|true  |
ADT   | -03:00:00|true  |
ARST  | -03:00:00|false |
ART   | -03:00:00|false |
BRA   | -03:00:00|false |
BRT   | -03:00:00|false |
CLST  | -03:00:00|true  |
FKST  | -03:00:00|false |
FKT   | -03:00:00|false |
GFT   | -03:00:00|false |
PMST  | -03:00:00|false |
PYST  | -03:00:00|true  |
UYT   | -03:00:00|false |
WGT   | -03:00:00|false |
NFT   | -03:30:00|false |
NST   | -03:30:00|false |
AMT   | -04:00:00|false |
AST   | -04:00:00|false |
BOT   | -04:00:00|false |
CLT   | -04:00:00|false |
EDT   | -04:00:00|true  |
GYT   | -04:00:00|false |
PYT   | -04:00:00|false |
VET   | -04:00:00|false |
ACT   | -05:00:00|false |
CDT   | -05:00:00|true  |
COT   | -05:00:00|false |
EST   | -05:00:00|false |
PET   | -05:00:00|false |
CST   | -06:00:00|false |
EASST | -06:00:00|false |
EAST  | -06:00:00|false |
GALT  | -06:00:00|false |
MDT   | -06:00:00|true  |
MST   | -07:00:00|false |
PDT   | -07:00:00|true  |
AKDT  | -08:00:00|true  |
PST   | -08:00:00|false |
AKST  | -09:00:00|false |
GAMT  | -09:00:00|false |
MART  | -09:30:00|false |
CKT   | -10:00:00|false |
HST   | -10:00:00|false |
TAHT  | -10:00:00|false |

...

Chúc các bác code vui vẻ!