当前位置: 首页 > 面试题库 >

时区相等的Postgres时间

司徒焕
2023-03-14
问题内容

time with time zone在Postgres的平等问题上遇到了麻烦。 timestamp with time zone平等的工作方式与我期望的一样,如果在对时区进行归一化之后,如果时间相同,那么它应该为真:

postgres=# select '2013-06-27 12:00:00 -0800'::timestamp with time zone = '2013-06-27 14:00:00 -0600'::timestamp with time zone;
 ?column?
----------
 t

但是,似乎不适用于以下情况time with time zone

postgres=# select '12:00:00 -0800'::time with time zone = '14:00:00 -0600'::time with time zone;
 ?column?
----------
 f

但是,不平等在我期望他们如何实现的过程中起作用:

postgres=# select '12:00:00 -0800'::time with time zone < '14:01:00 -0600'::time with time zone;
 ?column?
----------
 t

postgres=# select '12:00:00 -0800'::time with time zone > '13:59:00 -0600'::time with time zone;
 ?column?
----------
 t

我有什么误会time with time zone吗?如何以与timestamp with time zone平等相同的方式处理时区来评估平等?


问题答案:

以下是两种评估timetz平等的方法:

SELECT a, b, a = b AS plain_equality
      ,'2000-1-1'::date + a = '2000-1-1'::date + b AS ts_equality
      ,a AT TIME ZONE 'UTC', b AT TIME ZONE 'UTC'  AS timetz_equality
FROM (
   SELECT '12:00:00 -0800'::timetz AS a, '14:00:00 -0600'::timetz AS b
   ) sub;

第一个 将它添加到一个date。该 第二 通过使用AT TIME ZONE构建体。

但不要使用time with time zone。曾经。
Postgres仅支持该类型,因为它在SQL标准中。但是它是设计破坏的(不能考虑DST!),不建议使用。

在这里引用手册:

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



 类似资料:
  • 我不太理解时间戳的用法, 例如 用户创建文章,他们可以选择,系统也会自动存储。 a.我是否应该使和具有时区并设置UTC的时间戳? b.用户post字符串,然后将其转换为utc时间戳,如下所示使用并存储,当某人选择这一行时,将其显示为用户客户端时间反向使用 c.我使用到,是不是意味着服务器时间?我做得对吗? 我的想法是,我总是在数据库中插入utc时区时间戳,无论用户/客户端读取的地方,都将数据转换为

  • 我正在使用转换到新时区UTC+3,这等于EAT时区,但Postgres(9.1)显示错误的时间 (默认时区为斯德哥尔摩) 如果将JodaTime与两个时区一起使用,则显示相同的正确结果“2015-01-13 10:40:00”。

  • 问题似乎在这个文件中:https://github.com/brianc/node-postgres/blob/master/lib/types/textparsers.js 如果从Postgres返回的日期字符串没有指定时区(例如或),那么它只会构造一个JavaScript日期对象,我相信它只会包括本地时区。

  • 问题内容: 我有一个时间戳应该在EST中: 我了解第一部分:,但不了解。 这里是什么意思? 这是我获得该时间戳记的方式: 接着: 返回: 问题答案: 问题是: …不同于已记录的tzinfo实现的Python API;如果要创建本地时间,则需要使用本文档中介绍的方法… 再往下走,它说: 不幸的是,在许多时区中,使用标准datetime构造函数的tzinfo参数对pytz都不起作用。 因此,您需要按照

  • 我有一个应用程序,它使用许多不同的时区...它在控制器中设置它们,并根据用户的不同而改变它们。所有时间都以UTC形式存储,没有时间戳等。 Tzinfo有时会起作用...Postgres将与“欧洲/华沙”合作,但Rails返回“欧洲-华沙” 总的来说,我在时区方面运气不佳,任何指针都将不胜感激。

  • 问题内容: 我想知道WebDriver等待超时和隐式等待超时之间的技术差异。 问题答案: 如文档中所述: 在内部设置将用于所有连续搜索的超时。如果找不到该元素,它将尝试在指定的时间内反复查找该元素。它仅执行此操作,不能强制执行其他任何操作- 它等待元素显示。 ,或者只是您用于特定搜索的一次计时器。它具有更大的可扩展性,意味着您可以将其设置为等待可能需要的任何条件。通常,您可以使用一些预构建的元素来