Postgres 9.6,时区:为什么这两个查询给我不同的时间

隐身

好的,所以我一直对时区感到困惑。我越来越好,但还没有到。你们能启发我吗?

上下文:我从前端收到UTC时间。例如,要表示date 1 September 2019,我会得到2019-08-31 22:00:00Z(我们在布鲁塞尔夏令时,因此有2个小时的时差)。

从那时起,我需要在此之前产生一系列的6个月。就是这样March April May June July August

我设法找到了一个解决方案,说实话,有些运气不好。我仍然不确定我是否了解以下情况的详细信息:

database=> show timezone;
 TimeZone 
----------
 UTC
(1 row)

database=> select generate_series(
        ('2019-08-31 22:00:00Z'::timestamp at time zone 'Europe/Brussels')::date - '6 month'::interval,
        ('2019-08-31 22:00:00Z'::timestamp at time zone 'Europe/Brussels')::date - '1 month'::interval,
        '1 month'::interval
      );
   generate_series   
---------------------
 2019-02-28 00:00:00
 2019-03-28 00:00:00
 2019-04-28 00:00:00
 2019-05-28 00:00:00
 2019-06-28 00:00:00
 2019-07-28 00:00:00
(6 rows)

database=> select generate_series(
        ('2019-08-31 22:00:00Z' at time zone 'Europe/Brussels')::date - '6 month'::interval,
        ('2019-08-31 22:00:00Z' at time zone 'Europe/Brussels')::date - '1 month'::interval,
        '1 month'::interval
      );
   generate_series   
---------------------
 2019-03-01 00:00:00
 2019-04-01 00:00:00
 2019-05-01 00:00:00
 2019-06-01 00:00:00
 2019-07-01 00:00:00
 2019-08-01 00:00:00

如果使用,为什么会得到错误的结果::timestamp

劳伦兹·阿尔伯

实际上有两个不同的“操作符”命名为AT TIME ZONE,一种转换,另一种转换timestamp with time zonetimestamp without time zone

如果第一个参数是a timestamp with time zone,则该值将转换为a timestamp without time zone,从而显示该时区的挂钟会显示什么。

如果第一个参数是a timestamp without time zone,它将在会话时区(由timezone参数的值给出)中进行解释,并转换为绝对时间戳。

现在timestamp with time zone日期/时间类型类别首选类型,因此第二个查询中的字符串文字将根据文档解释为在第一个查询中,它是一个由于涉及不同的运算符,因此结果不同也就不足为奇了。timestamp with time zonetimestamp without time zone

在您的第一个查询中,挂钟时间22:00被解释为时钟挂在布鲁塞尔,因此实际上是20:00 UTC。generate_series从开始计数的第一个参数是2019年2月28日,世界标准时间20:00(在强制转换为之前date)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

这两个Postgres查询有什么区别

来自分类Dev

来自两个不同表的 Postgres 查询

来自分类Dev

Postgres-两个查询相减

来自分类Dev

在两个表中查询Postgres

来自分类Dev

postgres:select max返回9而不是10

来自分类Dev

时区相等的Postgres时间

来自分类Dev

为什么我的编译器会在Java中给我这两个错误?

来自分类Dev

仅比较postgres中两个时间戳的时间

来自分类Dev

Postgres 时间与带时区的时间

来自分类Dev

为什么Postgres EXPLAIN ANALYZE execute_time与运行实际查询时的时间不同?

来自分类Dev

查询字符不同的postgres

来自分类Dev

查询字符不同的postgres

来自分类Dev

带时区的Postgres时间戳

来自分类Dev

postgres如何查询ltree以匹配前两个标签

来自分类Dev

如何在Postgres 9中创建复合索引

来自分类Dev

为什么这两个查询返回不同数量的行

来自分类Dev

为什么这两个查询以不同的顺序检索记录?

来自分类Dev

为什么Postgres中的时区感知字段时区太幼稚

来自分类Dev

是什么让这两个查询返回不同的结果?

来自分类Dev

JavaScript日期:为什么这两个日期不同?

来自分类Dev

为什么这两个DOMDocument函数的行为不同?

来自分类Dev

为什么这两个FParsec片段不同?

来自分类Dev

为什么这两个警报显示不同的值?

来自分类Dev

为什么这两个“ cat”命令的结果不同?

来自分类Dev

为什么这两个代码给出不同的输出

来自分类Dev

为什么这两个 DateTime 实例不同?

来自分类Dev

为什么这两个模板函数的输出不同?

来自分类Dev

为什么输出与这两个不同?

来自分类Dev

为什么这两个函数的结果不同?