代码之家  ›  专栏  ›  技术社区  ›  Simeon Leyzerzon mthmulders

Postgres时间与带时区的时间

  •  0
  • Simeon Leyzerzon mthmulders  · 技术社区  · 7 年前

    有人能解释一下Postgres在处理以下情况时所采用的逻辑吗。

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

    18:30 PM
    

    然后它坚持到最后。我在数据库中创建了两个列,以突出处理上述时间的差异:

    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的消息吗。如果相关的话,我现在在一个最佳时区。

    提前谢谢你。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Laurenz Albe    7 年前

    似乎插入值的数据库会话正在以不同的值运行 timezone 而不是用来显示值的会话。

    time with time zone 在当前日期的会话时区中解释,并存储为自UTC午夜起的时间。

    你不应该用 时区时间 ,就像 the documentation 说:

    类型 时区时间 是由SQL标准定义的,但该定义显示的属性会导致不可靠的有用性。在大多数情况下 date , time , timestamp without time zone ,和 timestamp with time zone 应提供任何应用程序所需的完整的日期/时间功能范围。

    时区仅与日期结合使用才有意义,因为有些时区的偏移量在一年中会发生变化。如果您处于这样的时区,则 时区时间 全年都会有变化。

    推荐文章