选择tz感知时间戳及其本地utc偏移量

时间:2014-01-22 14:57:20

标签: postgresql timezone

所以我存储了一个时区感知时间,让我们说在莫斯科正午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文档但是在返回时没有成功保留时区信息。

2 个答案:

答案 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但是给你时区的时间。