select '2025-02-12T6:30:04'::timestamptz
。我预计结果将是
2025-02-12T11:30:04+00:00
,因为输入字符串2025-02-12T6:30:04中没有指定时区。因此,它应默认为系统的时区参数,该参数是EST,然后使用UTC和ESTC之间的偏移转换为UTC。
否,实际返回结果是
2025-02-12T06:30:04-05:00
,它代表EST而不是UTC的时间戳。
我误解了文档,还是文档本身有错误?
结果。只有
display有所不同。看看当我本地运行时会发生什么,
timezone = Europe/Vienna
test=> SELECT timestamptz '2025-02-12T11:30:04+00:00' AS t1
test-> , timestamptz '2025-02-12T06:30:04-05:00' AS t2
test-> , timestamptz '2025-02-12T06:30:04-05:00' = timestamptz '2025-02-12T11:30:04+00:00' AS the_same;
t1 | t2 | the_same
------------------------+------------------------+----------
2025-02-12 12:30:04+01 | 2025-02-12 12:30:04+01 | t
我在同一时间点上获得第三个等效的display。根据会话的设置,postgresdisplays值。如果您希望为UTC时区显示timestamptz
,则可以告诉Postgres您当前通过设置会话变量在该时区进行操作:
timezone
。 当然,只要没有明确的时区,Postgres就会假设UTC。
也是时区域缩写是一个仅编码恒定时间偏移的粗糙工具。要对夏令时(以及整个历史上的其他政治变化)保持明智,请使用
TimeZone名称,例如“ US/Eastern”,就像Adrian在评论中已经建议的一样。 请参阅“时区”的手册: postgres时间戳记签名时区