Postgres 时间与时区相等

The*_*uhn 5 sql postgresql time timezone

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
Run Code Online (Sandbox Code Playgroud)

但是,这似乎不适用于time with time zone

postgres=# select '12:00:00 -0800'::time with time zone = '14:00:00 -0600'::time with time zone;
 ?column?
----------
 f
Run Code Online (Sandbox Code Playgroud)

然而,不平等如何运作,我希望它们能:

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
Run Code Online (Sandbox Code Playgroud)

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

Erw*_*ter 6

这里有两种评估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;
Run Code Online (Sandbox Code Playgroud)

第一种方法是将其添加到date.
第二个通过使用AT TIME ZONE构造

而是根本不使用time with time zone
Postgres 支持该类型只是因为它在 SQL 标准中。它被设计破坏了(不能考虑 DST!)并且不鼓励使用它。

这里引用手册:

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