加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL,pgAdmin,Java:如何使它们全部为UTC?

发布时间:2020-12-13 15:56:40 所属栏目:百科 来源:网络整理
导读:如何确保我在PostgreSQL周围的整个开发环境不会搞乱本地时区.为简单起见,我需要100%确保每个时间(标记)值都是UTC.当我使用CURRENT_TIMESTAMP函数插入带时间戳而没有时区(!)的行时,我必须意识到情况并非如此,即使我从未指定任何时区信息. 是否有任何逐步手
如何确保我在PostgreSQL周围的整个开发环境不会搞乱本地时区.为简单起见,我需要100%确保每个时间(标记)值都是UTC.当我使用CURRENT_TIMESTAMP函数插入带时间戳而没有时区(!)的行时,我必须意识到情况并非如此,即使我从未指定任何时区信息.

是否有任何逐步手册可以帮助我摆脱时区?

解决方法

这需要先了解.我写了一篇关于PostgreSQL如何处理时间戳和时区的综合答案:
Ignoring timezones altogether in Rails and PostgreSQL

你不能“不”拥有时区.您可以使用timestamp [without time zone]类型进行操作,但您的客户端仍有时区.

你的陈述:

When I inserted a row with timestamp without time zone (!) using the CURRENT_TIMESTAMP function …

是一个contradictio in adjecto. CURRENT_TIMESTAMP返回带时区(!)的时间戳.如果您只是将其强制转换(或自动强制转换)到时间戳[没有时区],则时区偏移将被截断而不是应用.您获得本地时间(无论会话的当前时区设置是什么)而不是UTC.考虑:

SELECT CURRENT_TIMESTAMP AT TIME ZONE 'UTC',CURRENT_TIMESTAMP::timestamp

除非您的本地时区设置为“UTC”或类似“伦敦”,否则这两个表达式将返回不同的值.

如果要保存在时区中看到的文字值,请使用以下方法之一:

SELECT CURRENT_TIMESTAMP::timestamp,now()::timestamp,LOCALTIMESTAMP;

如果要保存以UTC表示的时间点,请使用以下方法之一:

SELECT CURRENT_TIMESTAMP AT TIME ZONE 'UTC',now() AT TIME ZONE 'UTC;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读