以微秒为单位的 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'
然后您可以将该值转换为 date
和 time
以获得相应的部分。
我会不将时间戳拆分成多个部分,我会不将时间转换为小数天,以免我放弃权力日期算术。
目前我正在重新设计一个数据库,而且我还必须从现有的 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'
然后您可以将该值转换为 date
和 time
以获得相应的部分。
我会不将时间戳拆分成多个部分,我会不将时间转换为小数天,以免我放弃权力日期算术。