>我需要使用类似于
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 的时区并不完全对应 1 比 1。
使用偏移量(如Time.zone.now.formatted_offset
的+10:00
偏移量(是不够的,因为在这种情况下,PG将无法正确处理夏令时。
所以问题是自动将Rails当前时区(Time.zone
(映射到PostgreSQL的命名时区的最佳方法是什么?
注意:create_at
列timestamptz
(存储为 UTC,显示在需要的任何区域中(
中似乎有一个MAPPING
常量在 ActiveSupport::TimeZone
中定义,其中包含的值,除非我弄错了,否则应该全部由 Postgres 支持:
http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html
根据文档:
键是 Rails 时区名称,值是 TZInfo 标识符。
如果您不想直接使用 MAPPING
常量,则其中有一个find_tzinfo
方法,它似乎返回一个TZInfo::TimezoneProxy
:
http://rubydoc.info/gems/tzinfo/TZInfo/TimezoneProxy
后者具有应包含所需字符串的identifier
方法。