前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NOW()会返回时区信息

NOW()会返回时区信息

作者头像
yzsDBA
发布2021-01-05 14:37:47
9510
发布2021-01-05 14:37:47
举报

Getting NOW() in your preferred timezone

执行NOW()函数获取当前时间时,可以获得日期和服务器所在的时区。很多服务器运行在UTC/GMT,如果用户也使用UTC/TMT,一切都会正常,但是一旦出现时区不匹配(无论是用户程序还是数据库服务或者其他方面),就会出错。因此需要指定。

NOW()返回带有时区的时间戳,但是如果使用timestamp[without timezone]列时,然后通过NOW()向这个列插入时,时区信息会自动删除:

代码语言:javascript
复制
=# create table test
      (a int primary key, b timestamp withouttime zone);

=# select now(),pg_typeof(now());
                now            |     pg_typeof   
-------------------------------+--------------------------
 2020-05-06 16:44:03.917735-07 | timestamp withtime zone
(1 row)

=# insert into testvalues
    (1, '2020-05-06 16:44:03.917735-07');

=# select * fromtest;
 a |         b        
---+----------------------------
 1 | 2020-05-06 16:44:03.917735
(1 row)

=# show timezone;
  TimeZone
------------
US/Pacific

我们可以看到列“b”中值没有了时区信息。这意味着存储的结果值是错误的,因为它不遵循用户将时间戳值作为UTC值的意向。我们可以通过now() at time one ‘utc’进行补救:

代码语言:javascript
复制
=# insert into test values
  (2, (now() at time zone 'utc'));

=# select * fromtest;
 a |         b        
---+----------------------------
 1 | 2020-06-10 19:38:22.859175
(1 row)

原文

https://postgresweekly.com/issues/368

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yanzongshuaiDBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Getting NOW() in your preferred timezone
    • 原文
    相关产品与服务
    数据库专家服务
    数据库专家服务(Database Expert Service,DBexpert)为您提供专业化的数据库服务。仅需提交您的具体问题和需求,即可获得腾讯云数据库专家的专业支持,助您解决各类专业化问题。腾讯云数据库专家服务团队均有10年以上的 DBA 经验,拥有亿级用户产品的数据库管理经验,以及丰富的服务经验。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档