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

Ruby on rails 如何将Rails时区名称映射到PostgreSQL?,ruby-on-rails,ruby,postgresql,timezone,Ruby On Rails,Ruby,Postgresql,Timezone,我需要使用类似于 SELECT*FROM items WHERE_char(在时区'RAILS'给定'u ZONE','DD/MM/yyyyy'创建)i类似于'%5/02%' 其中,RAILS\u给定的\u区域值应始终使用RAILS 4应用程序中的时区(可由用户更改),而不是PG的时区选项 但问题是Rails和PG的时区并不完全对应1对1 使用偏移量(如+10:00来自时区.now.formatted_offset)不够好,因为在这种情况下,PG将无法正确处理夏令时 所以问题是,自动将Rails

我需要使用类似于
SELECT*FROM items WHERE_char(在时区'RAILS'给定'u ZONE','DD/MM/yyyyy'创建)i类似于'%5/02%'

其中,
RAILS\u给定的\u区域
值应始终使用RAILS 4应用程序中的时区(可由用户更改),而不是PG的
时区
选项

但问题是Rails和PG的时区并不完全对应1对1


使用偏移量(如
+10:00
来自
时区.now.formatted_offset
)不够好,因为在这种情况下,PG将无法正确处理夏令时

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


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

似乎有一个
映射
常量定义在
ActiveSupport::TimeZone
中,其中包含的值,除非我弄错了,否则都应该由Postgres支持:

根据文件:

键是Rails时区名称,值是TZInfo标识符

如果您不想直接使用
映射
常量,那么其中有一个
find_tzinfo
方法,它似乎返回一个
tzinfo::TimezoneProxy


后者使用了一个
标识符
方法,该方法应该包含所需的字符串。

“这不够好,因为在这种情况下,PG将无法正确处理夏令时。”-您的意思是:因为Rails无法正确处理DST?(PG处理得很好,使用timestamptz类型。)@Denis no PG实际上无法从偏移量理解夏令时,因为偏移量通常有多个区域。Read并没有回答这个问题,但可能是关于@Denis这一主题的有趣阅读时区缩写,例如PST。这样的规范仅定义了UTC的特定偏移量,而完整时区名称也可能意味着一组夏令时转换日期规则。公认的缩写在pg_时区_abbrevs视图中列出(见第45.66节)。您不能将配置参数timezone或log_timezone设置为时区缩写,但可以在日期/时间输入值中使用缩写,并使用AT time zone运算符。“@Denis谢谢你给另一个答案的链接。但我很清楚这一点,这与我的问题完全无关。谢谢丹尼斯·德·伯纳德!你是说可以编写
ActiveSupport::TimeZone.find_tzinfo(Time.zone.name).identifier
来获取应用程序默认时区的PostgreSQL标识符。哦,有人知道更简洁的方法吗?