GaussDB(DWS)中的Unix时间戳【这次高斯不是数学家】

举报
葵花点薛手 发表于 2022/05/07 16:20:23 2022/05/07
【摘要】 unix时间戳是指UTC标准时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。在大多数的UNIX系统中UNIX时间戳存储为32位,这样会引发2038年问题或Y2038。

unix时间戳

unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)
是指UTC标准时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数,不考虑闰秒。

在大多数的UNIX系统中UNIX时间戳存储为32位,这样会引发2038年问题或Y2038,解决方案是转为64位存储。

时间戳获取方法

GaussDB(DWS) 在8.1.2版本之前获取unix时间戳的方式如下

SELECT extract(epoch FROM now()) ;

自8.1.2版本开始,可使用unix_timestamp函数获取当前时间戳

SELECT unix_timestamp() ;

时间戳相关函数

MySQL数据库中,支持unix时间戳和日期类型的相互转换,范围为’1970-01-01 00:00:01.000000’UTC到’2038-01-19 03:14:07.999999’ UTC。

GaussDB(DWS)自8.1.2版本开始,兼容并拓展MySQL的unix时间戳的相关函数,并使用64位存储,上限不再受制于’2038-01-19 03:14:07.999999’ UTC,避免2038年问题。

1、unix_timestamp函数

unix_timestamp() :将当前日期时间格式化成时间戳
unix_timestamp(timestamp) :将输入的日期时间格式化成时间戳

postgres=# SELECT unix_timestamp();
 unix_timestamp
----------------
     1633677293
(1 row)
postgres=# SELECT unix_timestamp('2021-10-01 10:12:23.123789+06');
  unix_timestamp
-------------------
 1633061543.123789
(1 row)
postgres=# SELECT unix_timestamp('3000-10-01 10:12:23');
   unix_timestamp
--------------------
 32527275143.000000
(1 row)

2、from_unixtime函数

from_unixtime(unix_timestamp) :将时间戳转成日期时间
from_unixtime(unix_timestamp, format) :将时间戳转成日期时间字符串

参数unix_timestamp要求为整数,且单位为秒。 如果从业务系统拿到的时间戳格式的时间单位为毫秒,则需要先将它转化为秒。

postgres=# SELECT from_unixtime(1633677293);
    from_unixtime
---------------------
 2021-10-08 15:14:53
(1 row)
postgres=# SELECT from_unixtime(1633061543.123789, '%Y %D %M %h:%i:%s.%f');
          from_unixtime
----------------------------------
 2021 1st October 12:12:23.123789
(1 row)

小结

个人认为,GaussDB(DWS)对Unix时间戳函数的支持还是比较好的,一方面考虑了对于MySQL数据库的兼容,另一方面解决了32位时间戳的上限问题,同时也填补了GaussDB(DWS)自身对于时间戳函数的缺失,一举三得。

【这次高斯不是数学家】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/351189

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。