Postgresql unix时间戳(微秒)到当前时区的时间戳

Postgresql unix时间戳(微秒)到当前时区的时间戳,postgresql,postgresql-10,Postgresql,Postgresql 10,目前我正在重新设计一个数据库,在这个数据库中,我还必须从现有数据库导入数据。 我面临的问题是时间戳转换。时间戳以微秒格式保存在现有数据库中,该格式由JS函数生成,因此它没有时区信息。 然而,在导入这些数据时,我必须将日期和时间保存在不同的列中,因此我必须将这个数字时间戳单独转换为日期和时间。然而,时间将再次以数字格式保存,以简化我的进一步计算。现在,当我检查时间戳时,我发现时间与时区偏移,这使数据失真。 有什么建议吗? 代码示例类似于: WITH ts AS (SELECT (8*60*60*1

目前我正在重新设计一个数据库,在这个数据库中,我还必须从现有数据库导入数据。 我面临的问题是时间戳转换。时间戳以微秒格式保存在现有数据库中,该格式由JS函数生成,因此它没有时区信息。 然而,在导入这些数据时,我必须将日期和时间保存在不同的列中,因此我必须将这个数字时间戳单独转换为日期和时间。然而,时间将再次以数字格式保存,以简化我的进一步计算。现在,当我检查时间戳时,我发现时间与时区偏移,这使数据失真。
有什么建议吗?

代码示例类似于:

WITH ts AS (SELECT (8*60*60*1000) AS ts)
SELECT  ts AS sample_input_in_ms,
        CAST(to_timestamp(ts/1000) AS TIME) calculated_time,
        (EXTRACT(EPOCH FROM cast(to_timestamp(ts/1000) AS TIME)) * 1000) AS calculated_output_in_ms
FROM ts;
这里,用于示例的时间是08:00:00 生成的输出是

sample_input_in_ms calculated_time calculated_output_in_ms 28800000 17:00:00 61200000 样本\u输入\u以毫秒计算\u时间计算\u输出\u以毫秒计算 28800000 17:00:00 61200000
请注意,JST的偏移量为+09:00小时

首先,将其转换为无时区的
时间戳

to_timestamp(usval / 1000000.0) AT TIME ZONE 'UTC'
然后,您可以将该值转换为
日期
时间
,以获得相应的部分

我不会把时间戳分成几个部分,也不会把时间转换成小数天,以免我放弃日期运算的能力