对于带有时区的时间戳,内部存储的值始终在UTC

问题描述 投票:0回答:1
这种解释似乎与有关时间戳在时区处理时间戳的说法相抵触。例如,我将系统的时区设置为EST并执行命令

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

postgresql datetime timestamp timestamp-with-timezone
1个回答
0
投票
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时间戳记签名时区


    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.