如何从 PostgreSQL 时间戳中获取时区

vin*_*boy 6 postgresql

这可能是一个非常简单的问题,但对 Google 来说很难,因为它匹配了太多不同的问题。

我想获取保存在我的数据库中的时间戳的时区(或偏移量)。

例如,现在在我的数据库中,我有

     expired_at      
---------------------
 2018-04-28 00:00:00
 2018-03-28 08:00:00
 2018-02-28 05:00:00
Run Code Online (Sandbox Code Playgroud)

我想找到所有expired_at具有 PST 偏移量的内容。

所以我的伪代码是这样的

SELECT expired_at FROM table WHERE expired_at IS IN TIMEZONE('PST')

我能得到一些帮助吗。谢谢!

附注。基本上,我试图通过查找所有 UTC 时间戳并将它们更新为 PST 来解决数据完整性问题。数据库现在混杂着许多不同的时区。

Mad*_*ist 19

Postgres 时间戳的文档说

对于带时区的时间戳,内部存储的值始终采用 UTC(世界协调时间,传统上称为格林威治标准时间,GMT)。使用该时区的适当偏移量将具有指定显式时区的输入值转换为 UTC。如果输入字符串中未指定时区,则假定它位于系统的 TimeZone 参数指示的时区中,并使用时区区域的偏移量转换为 UTC。

与正常人在阅读时可能期望的相反timestamp with time zone,这种 Postgres 数据类型实际上并不存储时区。在内部,该值始终转换为 UTC。

将值保存到数据库时,有关输入时区的信息会丢失。据我所知,没有办法获得你所寻求的信息。