PostgreSQL 更新时区偏移量
Posted
技术标签:
【中文标题】PostgreSQL 更新时区偏移量【英文标题】:PostgreSQL update time zone offset 【发布时间】:2011-09-23 11:22:39 【问题描述】:有什么快速简便的方法可以更正时区TIMESTAMP WITH TIME ZONE
字段意外输入错误的时区?
在我的情况下,以下记录被错误地输入为 UTC 而不是美国/太平洋:
t0 | t1 | what
------------------------+------------------------+---------------
2011-06-01 13:00:00+00 | 2011-06-01 13:10:00+00 | recalibrating
2011-06-01 13:10:00+00 | 2011-06-01 13:45:00+00 | verifying
2011-06-01 13:45:00+00 | 2011-06-01 13:55:00+00 | FAULT
幸运的是,所有错误记录都没有跨越夏令时边界,因此 2 点 UTC 可以简单地纠正为 2 点太平洋。
【问题讨论】:
【参考方案1】:有强制转换,更重要的是,at time zone
运算符对这类事情很有用,例如:
test=# select now(),
now()::timestamp;
now | now
-------------------------------+----------------------------
2011-06-27 14:32:04.169292+02 | 2011-06-27 14:32:04.169292
(1 row)
test=# select now() at time zone 'utc',
(now() at time zone 'utc')::timestamp with time zone;
timezone | timezone
----------------------------+-------------------------------
2011-06-27 12:32:28.430479 | 2011-06-27 12:32:28.430479+02
(1 row)
【讨论】:
【参考方案2】:UPDATE <table>
SET <timestamptz_field> =
(<timestamptz_field> AT TIME ZONE 'UTC') AT TIME ZONE '<correct_time_zone>';
【讨论】:
以上是关于PostgreSQL 更新时区偏移量的主要内容,如果未能解决你的问题,请参考以下文章
jdbc PostgreSQL 中的偏移时间(带时区的时间)
在 PostgreSQL timestamptz 类型中保留时区
如何利用PostgreSQL的UTC偏移量获得ISO格式的时间?