是否可以检索数据库中保存时间的时区?

时间:2014-11-06 14:09:15

标签: postgresql

我的列start_datetime类型为timestamp with timezone。我插入这样的数据:

INSERT INTO tbl VALUES('2014-05-28 13:20:00+05');

选择这样的数据:

SELECT start_datetime FROM tbl

我得到这个值(来自SELECT):2014-05-28 08:20:00+00,这是转换为UTC的相同日期,这是正确的。

但是我想知道是否可以从timestamp with timezone列类型中检索时区(示例中为+05)?我必须知道在数据库中插入了哪个时区时间戳。或者我可能必须将此数据存储在名为user_timezone的单独列中,并在那里存储时区数据?

1 个答案:

答案 0 :(得分:2)

  

所有时区感知日期和时间都以UTC格式存储在内部。他们   将在TimeZone指定的区域中转换为本地时间   配置参数在显示给客户端之前。

Source

因此,如果您需要知道通过INSERT或UPDATE语句指定的源时区或时区,则需要将其存储在单独的列中。

谨慎的程序员将使用

  • 时区的全名,例如“America / New_York”或
  • POSIX格式,如“EST5EDT”。

这两个都应该由CHECK()约束或外键引用来保护。记录的注意事项与上面链接的部分相同。

pgsql-hackers邮件列表上的

This recent thread有一些关于这个问题的好背景。