You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Postgres中'UTC-4'时区对应+04、'UTC+4'对应-04?

Postgres UTC±X时区符号反转原因说明

核心原因

出现符号相反的问题是因为Postgres兼容POSIX时区命名规范,该规范的偏移符号定义和我们日常使用的ISO 8601标准完全相反:

  • 日常直觉/ISO 8601规则:UTC±X的偏移表示 UTC时间加偏移等于本地时间,比如UTC+4对应本地时间=UTC+4小时
  • POSIX时区规则:UTC±X的偏移表示 本地时间加偏移等于UTC时间,对应计算逻辑刚好反转:
    • 写UTC+4时区时:本地时间 + 4小时 = UTC → 本地时间=UTC-4小时,对应直觉里的UTC-4偏移
    • 写UTC-4时区时:本地时间 -4小时 = UTC → 本地时间=UTC+4小时,对应直觉里的UTC+4偏移

你的查询结果也刚好验证了这个规则:
查询结果截图

避免混淆的写法

如果不想被符号规则绕晕,可以用两种无歧义的写法指定时区:

  1. 直接写ISO格式的偏移值,不需要加UTC前缀:
-- 对应直觉里的UTC+4偏移
SELECT now() AT TIME ZONE '+04';
-- 对应直觉里的UTC-4偏移
SELECT now() AT TIME ZONE '-04';
  1. 使用城市级时区名,完全规避符号问题:
-- 迪拜时区,固定为UTC+4偏移
SELECT now() AT TIME ZONE 'Asia/Dubai';
-- 纽约时区,夏令时会自动调整偏移
SELECT now() AT TIME ZONE 'America/New_York';

内容的提问来源于stack exchange,提问作者nghihua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:24:03