如何将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方法,该方法应包含所需的字符串。