【发布时间】:2014-06-18 16:59:49
【问题描述】:
我需要使用类似于SELECT * FROM items WHERE to_char(created_at AT TIME ZONE 'RAILS_GIVEN_ZONE', 'DD/MM/YYYY') ILIKE '%5/02%'的查询
RAILS_GIVEN_ZONE 值应始终使用 Rails 4 应用程序中的时区(可由用户更改),而不是 PG 的 timezone 选项。
但问题是 Rails 和 PG 的时区并不完全一一对应。
使用偏移量(如Time.zone.now.formatted_offset 中的+10:00)不够好,因为在这种情况下,PG 将无法正确处理夏令时。
那么问题是将 Rails 当前时区 (Time.zone) 自动映射到 PostgreSQL 的 named 时区的最佳方法是什么?
注意:create_at 列是 timestamptz(存储为 UTC,显示在任何需要的区域)
【问题讨论】:
-
"不够好,因为在这种情况下 PG 将无法正确处理夏令时。" - 你不是说:因为 Rails 没有正确处理 DST 吗? (PG 可以很好地处理它,使用 timestamptz 类型。)
-
@Denis no PG 物理上无法仅从偏移量中了解夏令时,因为该偏移量通常有多个区域。阅读postgresql.org/docs/9.1/static/…
-
不回答这个问题,但可能对这个话题很感兴趣:stackoverflow.com/questions/9571392/…
-
@Denis "时区缩写,例如 PST。这样的规范仅定义了与 UTC 的特定偏移量,与可能暗示一组夏令时转换的完整时区名称相反-date 规则。识别的缩写列在 pg_timezone_abbrevs 视图中(参见第 45.66 节)。您不能将配置参数 timezone 或 log_timezone 设置为时区缩写,但您可以在日期/时间输入中使用缩写值和 AT TIME ZONE 运算符。"
-
@Denis 感谢您提供指向其他 SO 答案的链接。但我很清楚这一点,它与我的问题完全无关。
标签: ruby-on-rails ruby postgresql timezone