我正在尝试更新我的一张桌子的某个字段中的时区。我在某些SO帖子中以几种方式进行了尝试,但似乎没有任何更改可以更改实际时区值。
任何人都可以解释为什么...
select
now(),
extract(timezone from now()) * interval '1sec',
(now()::timestamp || 'PST8PDT')::timestamptz,
extract(timezone from (now()::timestamp || 'PST8PDT')::timestamptz) * interval '1sec'
所有这些字段都具有相同的时区?在福塔雷萨/巴西对我来说,结果是:
2018-10-29 14:52:04.55495-03 | -03:00:00 | 2018-10-29 18:52:04.55495-03 | -03:00:00"
为什么?最后两个值不应该具有PST时区吗?
如何实际更改timestamp with time zone
字段的时区?
答案 0 :(得分:1)
您无法更改时区,因为数据类型timestamp with time zone
实际上并未存储开始的时区。时区仅用作输入/输出修改器。在内部,存储各个UTC时间戳值。
当前会话的timezone
设置确定该值的显示。要更改显示,请更改timezone
设置。 (即,假装在不同的时区中,当前时间以不同的方式显示。)
示例:
SET timezone = 'PST8PDT';
然后重试您的测试。
AT TIME ZONE
构造也可能有帮助。
相关: