PostgreSQL UTC 至 CET/CEST

标签 postgresql datetime timezone timestamp

我在时区和本杰明·富兰克林方面遇到了一些大麻烦。

我有一个带有 UTC 时间戳字段的表,未存储时区。

我的目标是按星期几或按 n 小时等切片对该表的行进行分组。

这就是我到目前为止的进展情况:

-- CET  => UTC/GMT + 1 => Winter
-- CEST => UTC/GMT + 2 => Summer
--
-- Hour changes 2014 : march 30th, 2h CET => 3h CEST
--
--
--      Output for "d"             Wanted output for "d"
-- "2014-03-28 23:00:00+00"   "2014-03-28 23:00:00+00" (23h UTC because CET)
-- "2014-03-29 23:00:00+00"   "2014-03-29 23:00:00+00" (23h UTC because CET)
-- "2014-03-30 23:00:00+00"   "2014-03-30 22:00:00+00" (22h UTC because CEST : fail because start timestamp is CET)

SELECT dates.d AS d, archives_d, range_begin_date, sequentialid

  FROM generate_series('2014-03-28T23:00:00+00:00'::timestamp, -- 23h UTC because CET -- 2014-03-28T22:00:00+00:00
                       '2014-03-31T21:59:59+00:00'::timestamp, -- 22h UTC because CEST -- 2014-03-31T21:59:59+00:00
                       '86400 seconds') AS dates(d)

  LEFT JOIN (
     -- Select archive date floored by a step (here 86400 seconds -> 24 hours)
     SELECT *, (to_timestamp(((floor(extract(epoch from (archives.range_begin_date - '2014-03-28T23:00:00+00:00'::timestamp)) / 86400)) * 86400) + extract(epoch from '2014-03-28T23:00:00+00:00'::timestamp))) AS archives_d
     FROM archives
  ) AS archives
    ON dates.d = archives.archives_d

 ORDER BY dates.d

您知道如何获得所需的输出(至少对于生成系列)。

请注意,我的生成系列步骤不是固定在某一天,而是任意间隔。

谢谢

最佳答案

pg_timezone_names 中有完整的时区名称和偏移量列表.

我猜您想要一个基于城市的名称而不是基于区域的名称。这样您就可以进行夏令时调整。

=> SELECT now() AT TIME ZONE 'America/New_York' AS ny, now() AT TIME ZONE 'Europe/London' AS lon;
            ny             |            lon
---------------------------+---------------------------
 2014-08-04 09:01:06.08988 | 2014-08-04 14:01:06.08988
(1 row)

以上内容发布于 UTC 时间 13:01。我猜纽约是你想要的,但地理不是我的强项:-)

关于PostgreSQL UTC 至 CET/CEST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25117278/

相关文章:

string - 如何从 dateTime flutter 比较 2 小时

javascript - 如何将时区动态设置为客户端时区

ruby-on-rails - Rails 3-仅美国时区的时区下拉列表

ios - 我怎样才能完全忽略整个应用程序中的时区?

sql - 对 UTF 编码字符应用 SQL LIKE 语句没有结果

sql - sql原因计算时间差

python - 使用 Django 在另一台服务器上创建 PostgreSQL 数据库

c - 使用 mktime() 查找两个日期之间的差异

java - 如何将 Java Date 对象转换为带时区的 Matlab 日期时间数组

python - 在 Django 时区感知设置上查询每小时的点击次数