如何将Rails时区名称映射到PostgreSQL?
我需要使用类似的查询
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,显示在任何需要的区域中)
似乎在ActiveSupport::TimeZone
定义了一个MAPPING
常量,其中包含的值除非我误以为,否则Postgres都应支持这些值:
http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html
根据文档:
键是Rails TimeZone名称,值是TZInfo标识符。
如果你不想直接使用MAPPING
常量,那里有一个find_tzinfo
方法,它似乎返回一个TZInfo::TimezoneProxy
:
http://rubydoc.info/gems/tzinfo/TZInfo/TimezoneProxy
后者采用identifier
方法,该方法应包含所需的字符串。