所以我存储了一个时区感知时间,让我们说在莫斯科正午12点2014-01-22 12:00:00+04
。我想要返回,但如果我只是致电select my_timestamp from my_table
,则会返回2014-01-22 08:00:00+00
。我有一个timezone
列,其中包含时区的olson名称(在本例中为europe/moscow
),有没有什么方法可以构造一个select,它返回我输入的确切对象及其保留的时区,而不是它转换成我服务器的当地时间(GMT)?我已经看过提及at time zone
函数的postgres文档但是在返回时没有成功保留时区信息。
答案 0 :(得分:1)
不,没有办法做到这一点。 PostgreSQL不存储插入或更新值的客户端的偏移量。
如果将该偏移存储在单独的列中,则可以将其与时间戳值连接,但是对于涉及夏令时的某些条件,您可能会返回错误的值。
使用AT TIME ZONE
语法和正确的时区应该为您提供正确的时间戳值,但不包括最初插入或更新时间戳的客户端的偏移量。
答案 1 :(得分:0)
无论如何,看看这是否有帮助:
SELECT now(), now()::timestamp, now() AT TIME ZONE 'europe/moscow', now()::timestamp AT TIME ZONE 'europe/moscow'
您可以在时区之间进行转换。不给你时区+ 04但是给你时区的时间。