【问题标题】:Date to milliseconds / milliseconds to date日期到毫秒/毫秒到日期
【发布时间】:2014-10-12 14:36:23
【问题描述】:

我有一个以毫秒为单位的日期。通过以下方式获得:

SELECT EXTRACT(MILLISECONDS FROM NOW())

如何再次恢复到某个日期?

我试过了:

SELECT TO_TIMESTAMP(EXTRACT(MILLISECONDS FROM NOW()))

上面返回的日期是 1970 年 ...

【问题讨论】:

  • extract(MILLISECONDS ...) 仅返回时间戳中的小数秒。您正在寻找extract(epoch ..)
  • @a_horse_with_no_name:这是不正确的。我已经从手册中发布了正确的解释。 OP 真正想要什么是未定义的。
  • @ErwinBrandstetter:Thom 显然希望extract(milliseconds) 获得一个值,然后可以将其转换回原始值。这样做的唯一方法是使用 epoch 值。
  • 我想要的正是@a_horse_with_no_name 所说的。将日期转换为毫秒并稍后恢复。
  • JKS 的答案就是您要找的。​​span>

标签: sql postgresql date timestamp milliseconds


【解决方案1】:

EXTRACT(MILLISECONDS ...) 让你 (per documentation) ...

秒字段(包括小数部分)乘以 1000。 请注意,这包括整秒。

只需测试:

SELECT now(), EXTRACT(MILLISECONDS FROM NOW()) AS millisec;

剩下的是in the manual as well:

时代

对于timestamp with time zone 值,自 1970-01-01 00:00:00 UTC 以来的秒数(可以是负数);对于datetimestamp 值,自本地时间 1970-01-01 00:00:00 以来的秒数; 对于interval 值,间隔内的总秒数

SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40.12-08');
*Result: 982384720.12*

SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours');
*Result: 442800*

以下是如何将 epoch 值转换回时间戳:

SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 982384720.12 * INTERVAL '1 second';

to_timestamp函数封装了上述转换。)

【讨论】:

    【解决方案2】:

    EXTRACT 无法以毫秒为单位获取日期。 我认为这应该可行:

    SELECT EXTRACT(EPOCH FROM NOW()) * 1000;
    SELECT TO_TIMESTAMP(EXTRACT(EPOCH FROM NOW()))
    

    Found here

    【讨论】:

    • 它会返回什么?我正在使用 postgresql。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2016-03-26
    • 2021-06-30
    • 2018-12-22
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多