如何将Rails时区名称映射到PostgreSQL?

Dmy*_*iak 5 ruby postgresql timezone ruby-on-rails

我需要使用类似的查询
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的时区并不完全一对一。

使用偏移量(如+10:00from中的值Time.zone.now.formatted_offset)还不够好,因为在这种情况下,PG将无法正确处理夏令时。

因此,问题是将Rails当前时区(Time.zone)自动映射到PostgreSQL 命名时区的最佳方法是什么?

注意:create_at列是timestamptz(存储为UTC,在必要的任何区域中显示)

Den*_*rdy 2

中似乎MAPPING定义了一个常量ActiveSupport::TimeZone,其中包含的值(除非我弄错了)应该都受 Postgres 支持:

http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

根据文档:

键是 Rails TimeZone 名称,值是 TZInfo 标识符。

如果你不想直接使用常量,那里MAPPING有一个方法,它似乎返回一个:find_tzinfoTZInfo::TimezoneProxy

http://rubydoc.info/gems/tzinfo/TZInfo/TimezoneProxy

后者包含一个identifier应该包含所需字符串的方法。