当前位置:  开发笔记 > 数据库 > 正文

如何知道postgresql 8.3中时间戳的时区

如何解决《如何知道postgresql8.3中时间戳的时区》经验,为你挑选了2个好方法。

我正在使用postgresql 8.3,我想知道特定时间戳的时区(表中的一列).

在文档中我发现了关键字"timezone"

但我不明白如何在表格列中应用它.可能吗 ?



1> Johannes Wei..:

我假设你有一个名为列ct具有类型TIMESTAMPTZ的表t.然后你可以使用:

SELECT EXTRACT(TIMEZONE FROM ct) FROM t;

以秒为单位获取时区的偏移量.这是给你3600UTC/ GMT这意味着要么GMT+1,CET或什么的.返回的值取决于您的TIMEZONE设置.

样本(我住在德国,实际时区ist GMT+1/ CET):

test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz;
      timestamptz       
------------------------
 2008-01-01 18:00:00+01

test=# set timezone to 'gmt';
SET
test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz;
      timestamptz       
------------------------
 2008-01-01 17:00:00+00

如您所见,它始终在配置的时区中输出任何内容.因此,您将获得的偏移EXTRACT(TIMEZONE FROM ...)取决于您的TIMEZONE设置.给出的时区INSERT丢失了,因为它不值得保存.重要的是,一切都是正确的,不应该取决于TIMEZONE设置.PostgreSQL做得非常好.



2> W Strzalka..:

"PostgreSQL做得非常好."

我真的很喜欢PostgreSQL,但在这个特殊的功能中,它并不是很好.时区不仅抵消了GMT.时区对于暗示夏令时的政治规则是紧迫的.由于有大量时区具有相同的偏移和不同的夏令时规则 - 当PG忘记原始时区时,它实际上会丢失信息.

我个人将原始时区分别存储在"America/New_York"形式的重要日期.如果有人有更好的解决方案 - 欢迎.


是的,而pg类型名称'timestamp with timezone'具有误导性.真正保存在数据库中的信息与"没有时区的时间戳"相同.唯一可以改变的是即时转换到/从UTC转换到您的全局时区或输入和输出时刻.所以pg类型'带时区的时间戳'不要保存时区信息.
推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有