如何将bigint(以毫秒为单位的时间戳)值写为postgresql中的时间戳

时间:2014-05-30 08:18:51

标签: postgresql timestamp unix-timestamp milliseconds bigint

我正在尝试使用timezone字段存储时间戳我的值。它是从1970年开始的毫秒。

select TO_CHAR(TO_TIMESTAMP(1401432881230), 'DD/MM/YYYY HH24:MI:SS.MS')

预计30/5/2014 11:29:42 10:54:41.230,但得到 22/08/46379 23:27:02.000

3 个答案:

答案 0 :(得分:29)

Unix timestamps以秒为单位测量时间,毫秒(几乎无处不在,在PostgreSQL中也是如此)。

因此您需要致电

SELECT TO_TIMESTAMP(1401432881230 / 1000);

如果您想保留毫秒数,请致电double precision

SELECT TO_TIMESTAMP(1401432881230::double precision / 1000);

答案 1 :(得分:0)

这就是我将ms转换为时间戳并将ms保持为秒的方式。接受的答案将丢失ms。

WITH ts AS (SELECT 1401432881230 AS ts)
SELECT to_timestamp(ts / 1000) + ((ts % 1000 ) || ' milliseconds') :: INTERVAL
FROM ts;

-- FOR ALTER COLUMN
ALTER TABLE  my_info
  ALTER COLUMN tstmp TYPE TIMESTAMP USING to_timestamp(tstmp / 1000) + ((tstmp % 1000) || ' milliseconds') :: INTERVAL;

答案 2 :(得分:-2)

好的,我明白了。我的INSERT应该如下:

INSERT INTO events (timestamp) VALUES (to_timestamp(TO_CHAR(TO_TIMESTAMP(1401432881222 / 1000), 'YYYY-MM-DD HH24:MI:SS') || '.' || (1401432881222%1000), 'YYYY-MM-DD HH24:MI:SS.MS'))

我将bigint-timestamp(毫秒)转换为具有所需格式的文本(' YYYY-MM-DD HH24:MI:SS.MS')并将其传递给to_timestamp函数。