如果您在 Postgres 上执行类似以下查询的操作:
SELECT * FROM pg_timezone_names() WHERE name LIKE '%Rome%';
你会得到一堆“奇怪”的时区:
postgres=# SELECT * FROM pg_timezone_names() WHERE name LIKE '%Rome%';
name | abbrev | utc_offset | is_dst
-------------------+--------+------------+--------
Europe/Rome | CET | 01:00:00 | f
posix/Europe/Rome | CET | 01:00:00 | f
(2 rows)
我想知道为什么posix/
存在,它们代表什么(它们不是 IANA 官方时区,对吗?)以及它们何时使用。它们看起来像是 POSIX 标准和 Olson DB 的混合体,但 posix 应该将 -1 作为 utc_offset,对吗?我正在考虑使用该pg_timezone_names()
功能让用户有机会选择自己的时区,但我无法理解 Postgres 中这种特定类型时区的含义。
通常,如果它们在您的系统上,则不应使用
Posix/
或时区。Etc/
这不是 PostgreSQL 的东西,它是用于内部时区函数的发行版 libc 数据库(有时打包为 tzdata/zoneinfo) 。大多数 POSIX 的东西都令人讨厌和陈旧。PostgreSQL 有一个文档提到它。我想具体回答这个问题,
据我所知,确实没有理由不使用 IANA 名称。
除了 Evan Carroll 的回答之外,您还可以使用类似于此的内容来获取列表:
结果是: