有人可以解释在处理以下情况时Postgres适用的逻辑。
Django视图以以下格式接收时间的字符串表示形式:
18:30 PM
然后将其保存到Postgres。我在数据库中创建了两列,以突出显示处理上述时间的区别:
start_at time NOT NULL,
start_at_tz timetz NOT NULL,
这是保存在数据库中的内容:
该行为似乎是将7个小时的差异应用于时区列。值格式似乎没有纳入24小时/天的截止日期。
以前的时间转换为:
下午13:00
下午14:00
有人能说明PostgreSQL的一些细节吗?如果相关的话,我处于EST时区。
谢谢。
答案 0 :(得分:1)
插入值的数据库会话似乎正在以与您用于显示值的会话不同的timezone
值运行。
time with time zone
在当天的会话时区中进行解释,并存储为UTC午夜以来的时间。
您不应该使用time with time zone
,就像the documentation所说的那样:
类型
time with time zone
由SQL标准定义,但是该定义显示的属性会导致有用的疑问。在大多数情况下,date
,time
,timestamp without time zone
和timestamp with time zone
的组合应提供任何应用程序所需的完整日期/时间功能。
时区仅与日期结合使用才有意义,因为在某些年份中偏移会发生变化。如果您处于这样的时区,time with time zone
的显示值将在一年中变化。