为什么这些 SQL 表达式中的时区没有变化?
Why doesn't the timezone changes in these SQL expressions?
我正在尝试更新我的一个表的某个字段中的时区。我尝试了一些 SO 帖子中的几种方法,但似乎没有任何改变实际时区值。
任何人都可以解释为什么...
select
now(),
extract(timezone from now()) * interval '1sec',
(now()::timestamp || 'PST8PDT')::timestamptz,
extract(timezone from (now()::timestamp || 'PST8PDT')::timestamptz) * interval '1sec'
所有这些字段都具有相同的时区?我在 Fortaleza/Brazil 中的结果是:
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
字段的时区?
您不能更改时区,因为数据类型 timestamp with time zone
实际上并不存储开始时的时区。时区仅用作输入/输出修饰符。在内部,存储了相应的 UTC 时间戳值。
当前会话的timezone
设置决定了值的显示。要更改显示,请更改 timezone
设置。 (即假装在不同的时区,当前时间显示不同。)
示例:
SET timezone = 'PST8PDT';
然后重试您的测试。
AT TIME ZONE
构造也可能有用。
相关:
- Set timestamp column's timezone in PostgreSQL
- Ignoring time zones altogether in Rails and PostgreSQL
我正在尝试更新我的一个表的某个字段中的时区。我尝试了一些 SO 帖子中的几种方法,但似乎没有任何改变实际时区值。
任何人都可以解释为什么...
select
now(),
extract(timezone from now()) * interval '1sec',
(now()::timestamp || 'PST8PDT')::timestamptz,
extract(timezone from (now()::timestamp || 'PST8PDT')::timestamptz) * interval '1sec'
所有这些字段都具有相同的时区?我在 Fortaleza/Brazil 中的结果是:
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
字段的时区?
您不能更改时区,因为数据类型 timestamp with time zone
实际上并不存储开始时的时区。时区仅用作输入/输出修饰符。在内部,存储了相应的 UTC 时间戳值。
当前会话的timezone
设置决定了值的显示。要更改显示,请更改 timezone
设置。 (即假装在不同的时区,当前时间显示不同。)
示例:
SET timezone = 'PST8PDT';
然后重试您的测试。
AT TIME ZONE
构造也可能有用。
相关:
- Set timestamp column's timezone in PostgreSQL
- Ignoring time zones altogether in Rails and PostgreSQL