PostgreSQL:如何concat +转换Unix epoch timestamp到date + time

trnvg8h3  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(178)

我有一个带有时间戳的专栏。转换后的列提供了一个从1975年开始的日期时间值。这意味着我应该用'0' concat()该值并将其转换为正确的日期时间。
我写了一些东西,它显示了非常接近的值,但当我在浏览器中双击它时却不一样。
示例:

select to_timestamp(
          cast(
             dt:double precision/1000 as bigint
          )
       ) as ts, *
from (select col1, col2, concat(timestamp, '0') as dt
      from table1
      order by col1 desc) as foo

例如,对于初始时间戳168665720100,在concatto_timestamp之后,我得到2023-06-13 14:53:21,而实际上应该是2023-06-13 11:53:21。

t8e9dugd

t8e9dugd1#

这将取决于您的数据库/会话设置在哪个timezone中。
此示例显示您使用不同时区发布的相同值:'Australia/Brisbane'

SET timezone TO 'Australia/Brisbane';

SELECT to_timestamp(1686657201000/1000);

      to_timestamp      
------------------------
 2023-06-13 21:53:21+10
(1 row)

因此,您需要做的就是使用AT TIME ZONE设置最适合您所在位置的时区,例如。UTC

SET timezone TO 'Australia/Brisbane';

SELECT to_timestamp(1686657201000/1000) AT TIME ZONE 'UTC';

      timezone       
---------------------
 2023-06-13 11:53:21
(1 row)

相关问题