如何使用postgresql上的unix时间戳

时间:2016-01-20 13:47:06

标签: php postgresql unix-timestamp

我必须使用postgres数据库9.4,我想使用时间戳。 第一个问题'就是当我在postgres上创建一个时间戳列时,我不知道它在内部的作用,但当我查询它时,返回' 2010-10-30 00:00:00'

对我来说,时间戳就像这样12569537329(unix timestamp)。

我说因为是整数或浮点数,计算机比较字符串更容易处理,每个国家/地区都有自己的时间格式,其中unix时间戳是一个数字和故事的结尾。< / p>

从php查询结果是一个字符串,所以我必须做一堆杂耍,因为时区,白天节省光和其他东西可能会出错。

我搜索了很多内容,无法在postgresql上找到使用unix时间戳的方法。

有人可以解释是否有办法或正确的工作方式并尽可能接近unix时间戳。

更新

有一件事我发现它会帮助我,并且需要花费很长时间才能发现postgresql可能会更改间隔输出

pg manual

在php中,月份的日期间隔是“月份”。因为pg是&#39; mon&#39;在PHP上,它会理解为星期一。 我认为,如果你不得不耍弄太多,那你做错了。 很高兴postgres让我们改变会话或永久性的行为。 因此,将intervalstyle设置为iso_8601,它将作为php iso_8601工作,并输出P1M

2 个答案:

答案 0 :(得分:0)

只需将unix time_t转换为时间戳,然后在postgres中使用它:

CREATE TABLE omg
        ( seq SERIAL NOT NULL PRIMARY KEY
        , stampthing TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
        );

INSERT INTO omg(stampthing) SELECT now();

INSERT INTO omg(stampthing) VALUES
 ('epoch'::timestamptz )
 , ('epoch'::timestamptz + 12569537329 * '1 second'::interval)
        ;

SELECT stampthing
        , DATE_PART('epoch',stampthing) AS original
FROM omg;

输出:

CREATE TABLE
INSERT 0 1
INSERT 0 2
          stampthing           |     original     
-------------------------------+------------------
 2016-01-20 16:08:12.646172+01 | 1453302492.64617
 1970-01-01 01:00:00+01        |                0
 2368-04-24 20:08:49+02        |      12569537329
(3 rows)

答案 1 :(得分:0)

如果您只是在postgres中查询时间戳列,您将获得格式化日期。如果您更喜欢unix时间戳整数,则可以在使用类似

的语法返回时将其强制转换
select extract(epoch from '2011-11-15 00:00:00+01'::timestamp with time zone)::integer;

如果您经常这样做,您可以使用摘录进行查看。

或者您可以将时间戳列定义为整数,并使用extract()

存储数据