我是PostgreSQL的新手,我想知道是否有一种直接的方法可以使用函数将表中的时间戳值转换为不同的时区。就我而言,它是UTC到EST。
这些是我需要转换为EST的值(不只是一个值,而是表中的所有值)
date
-------------------
2015-10-24 16:38:46
2016-01-19 18:27:00
2016-01-24 16:14:34
2016-02-09 23:05:49
2016-02-11 20:46:26
答案 0 :(得分:37)
在伦敦,我们目前比UTC早1小时。所以 - 如果我把你的时区没有时间戳并说它是UTC,那么我会把它打印成我当地的时区。
richardh=> SELECT ((timestamp '2015-10-24 16:38:46') AT TIME ZONE 'UTC');
timezone
------------------------
2015-10-24 17:38:46+01
(1 row)
但是你想要" EST"从返回的价值来看,它似乎在美洲的某个地方。如果需要,可以将表达式包装在一个小的SQL函数中。
richardh=> SELECT ((timestamp '2015-10-24 16:38:46') AT TIME ZONE 'UTC') AT TIME ZONE 'EST';
timezone
---------------------
2015-10-24 11:38:46
(1 row)
编辑:如何在查询中执行此操作
SELECT ((stored_timestamp AT TIME ZONE 'UTC') AT TIME ZONE 'EST') AS local_timestamp
FROM my_table;
如果这类事情导致您出现问题,您可能希望获得一本关于SQL的入门书。
答案 1 :(得分:13)
类似地 执行
SELECT '2015-10-24 16:38:46'::timestamp AT time zone 'EST';
timezone
------------------------
2015-10-24 21:38:46+00
(1 row)
答案 2 :(得分:2)
我通常将所有内容保留在UTC中,并在需要显示时进行转换。 我使用类似的东西:
SELECT my_date_utc AT time zone 'utc' at time zone 'est' From ....
答案 3 :(得分:0)
您应始终将日期的主要参考存储在UTC中,并在查询中将其转换为时区,或将数据的特定时区版本存储在另一列中。这样做的原因是,只要您知道将日期存储为UTC的时区,就可以快速轻松地将日期从UTC转换为另一个时区。它消除了猜测工作。或者,您可以将日期和时区一起存储。
如果您有一项操作会使用服务器的系统时钟自动填充日期,则可以 答:更改操作以使用UTC时间 B:将服务器上的系统时钟更改为UTC
答案 4 :(得分:0)
我遇到了同样的问题,我正在使用不同的地区和时区,我只需要在查询中修复时区,以免影响该地区的其他客户,并且我没有更改表结构或其他任何东西(开闭原理)。我在查询中做了什么: 选择TO_CHAR(当前时区在时区“澳大利亚/墨尔本” ,“ DD / MM / YYYY hh24:mi AM”)作为date_of_extract 这对我有用,我可以将Postgressql的'UTC'无效时区更改为'Australia / Melbourne'(您正在研究的任何时区)。希望这会有所帮助。
答案 5 :(得分:0)
如果您在访问区域时遇到问题,也可以简单地通过区域间隔。 要将时间戳从IST转换为UTC。
SELECT '2020-12-14 06:38:46'::timestamp AT time zone INTERVAL '+05:30';
timezone
------------------------
2015-10-24 11:38:46+00
(1 row)
要将时间戳从UTC转换为IST。
SELECT '2020-12-14 06:38:46'::timestamp AT time zone INTERVAL '-05:30';
timezone
------------------------
2020-12-14 12:08:46+00
(1 row)