【发布时间】:2018-07-31 09:34:45
【问题描述】:
我有 3 个类型为 VARCHAR(包含时区,例如“欧洲/罗马”)、DATE 和 INTERVAL 的单独字段。我想在查询中组合它们,以便得到TIMESTAMP WITH TIME ZONE。制作这个值的规则是:
给定时区指定日期的中午,负 12 小时加给定间隔(处理 DST 需要这个 -12 小时)。
显然加/减INTERVAL 不是问题。我的问题是我不明白如何创建“给定时区指定日期的中午”。
一个简单的例子:
- 如果我有时区字段“欧洲/罗马”
- 日期为 2018 年 3 月 24 日(该时区 DST 切换日期)
- 间隔为“1 小时”
计算应该是这样的:
- 创建指定日期的中午:2018-03-24 12:00:00 at 'Europe/Rome' time zone
- 减去
INTERVAL '12 hours',结果是 2018-03-24 01:00:00 在“欧洲/罗马”时区(由于 DST) - 添加
INTERVAL '1 hour',最终结果为“欧洲/罗马”时区2018-03-24 02:00:00。
第 1 点我该怎么做?
附:我无法更改数据架构。它来自加载到 postgres 中的GTFS 数据。简而言之,这个模式的特点是它将时区、日期和时间间隔存储在 3 个不同的表中:agency、calendar_dates 和 stop_times(好吧,时区可能在其他表中,但这对于这个问题并不重要)。
【问题讨论】:
-
您使用哪种语言?
-
@paulh 我需要在 SQL 中执行此操作,因为此结果字段是物化视图的一部分
标签: postgresql datetime timezone gtfs