Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 是否可以检索数据库中保存时间的时区?_Postgresql - Fatal编程技术网

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

Postgresql 是否可以检索数据库中保存时间的时区?,postgresql,Postgresql,我有一列start\u datetime,它的类型是带时区的时间戳。我插入如下数据: INSERT INTO tbl VALUES('2014-05-28 13:20:00+05'); SELECT start_datetime FROM tbl 并选择如下数据: INSERT INTO tbl VALUES('2014-05-28 13:20:00+05'); SELECT start_datetime FROM tbl 我从SELECT中得到这个值:2014-05-28 08:20:

我有一列
start\u datetime
,它的类型是带时区的
时间戳。我插入如下数据:

INSERT INTO tbl VALUES('2014-05-28 13:20:00+05');
SELECT start_datetime FROM tbl
并选择如下数据:

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的相同日期,这是正确的

然而,我想知道是否有可能从带有时区的
时间戳中检索时区(+05)(在本例中为
列类型)?我必须知道哪个时区的时间戳被插入到数据库中。或者我必须将这些数据存储在一个名为
user\u timezone
的单独列中,然后将时区数据存储在那里

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

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

细心的程序员将使用

  • 时区的全称,如“美国/纽约”,或
  • POSIX格式,如“EST5EDT”
这两者都应该由CHECK()约束或外键引用保护。记录的注意事项在上面链接的同一节中


在pgsql上,黑客邮件列表对这个问题有一些很好的背景

还有一个问题-是否有postgres函数从datetime字符串中获取时区名称以插入如下数据:
插入tbl值('2014-05-28 13:20:00+05',时区名称('2014-05-28 13:20:00+05'))
?或者是一些扩展?好吧,用PostgreSQL做这件事没有绝对简单的方法。表达式
extract(当前时间戳的时区)
将以秒为单位返回偏移量
to_char(当前时间戳'TZ')
将返回类似EST(东部标准时间)的字符串。