以微秒为单位的 unix 时间戳到当前时区的时间戳

unix timestamp in microsecond to timestamp with current timezone

目前我正在重新设计一个数据库,而且我还必须从现有的 Db 导入数据。 我面临的问题是时间戳转换。保存在现有数据库中的时间戳是微秒格式,由 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

这里请注意 JST 的偏移量为 +09:00

首先,将其转换为 timestamp without time zone:

to_timestamp(usval / 1000000.0) AT TIME ZONE 'UTC'

然后您可以将该值转换为 datetime 以获得相应的部分。

我会将时间戳拆分成多个部分,我会将时间转换为小数天,以免我放弃权力日期算术。