Postgres TIME vs TIME与时区

时间:2018-08-03 13:56:41

标签: django postgresql timezone

有人可以解释在处理以下情况时Postgres适用的逻辑。

Django视图以以下格式接收时间的字符串表示形式:

18:30 PM

然后将其保存到Postgres。我在数据库中创建了两列,以突出显示处理上述时间的区别:

start_at time NOT NULL,
start_at_tz timetz NOT NULL,

这是保存在数据库中的内容:

enter image description here

该行为似乎是将7个小时的差异应用于时区列。值格式似乎没有纳入24小时/天的截止日期。

以前的时间转换为:

下午13:00

enter image description here

下午14:00

enter image description here

有人能说明PostgreSQL的一些细节吗?如果相关的话,我处于EST时区。

谢谢。

1 个答案:

答案 0 :(得分:1)

插入值的数据库会话似乎正在以与您用于显示值的会话不同的timezone值运行。

time with time zone在当天的会话时区中进行解释,并存储为UTC午夜以来的时间。

您不应该使用time with time zone,就像the documentation所说的那样:

  

类型time with time zone由SQL标准定义,但是该定义显示的属性会导致有用的疑问。在大多数情况下,datetimetimestamp without time zonetimestamp with time zone的组合应提供任何应用程序所需的完整日期/时间功能。

时区仅与日期结合使用才有意义,因为在某些年份中偏移会发生变化。如果您处于这样的时区,time with time zone的显示值将在一年中变化。