如何将 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_attimestamptz(存储为 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方法。

相关内容

  • 没有找到相关文章

最新更新