【发布时间】:2016-10-03 07:24:07
【问题描述】:
我想测试时间戳和时间戳与时区字段的一些差异。但是我遇到了一些我无法真正理解它为什么会这样工作的东西。
我有以下设置:
CREATE TABLE tbl_test_timezones (
first_date timestamp with time zone,
second_date timestamp
)
我已经插入了一些测试数据:
insert into tbl_test_timezones (first_date, second_date) values (now(), now());
现在我想在进行选择时检查两个字段之间的差异
select
first_date,
first_date at time zone 'Europe/Brussels' as first_date_wt,
second_date,
second_date at time zone 'Europe/Brussels' as second_date_wt
from tbl_test_timezones
which gives me the following result
first_date: 2016-10-03 07:03:16.63818+00
first_date_wt: 2016-10-03 09:03:16.63818
second_date: 2016-10-03 07:03:16.63818
second_date_wt: 2016-10-03 05:03:16.63818+00
问题 1
我想知道为什么 second_date_wt 是 -2 而不是像 first_date_wt 那样 +2?
问题 2
假设我的应用程序存储带有时区的时间戳,并且用户想要获取一些带有该时间戳的记录。您是否必须为用户存储某种用户设置,他可以在其中输入他的时区,并在检索时始终将其包含在选择查询中?还是您更喜欢只获取它并在客户端应用程序中执行该时区的工作?
例如:
select start_date at time zone (
select user_time_zone from tbl_user_settings where user_id = 2
)
from tbl_projects
或者只是做
select start_date
from tbl_projects
【问题讨论】:
标签: postgresql datetime timestamp-with-timezone