ruby-on-rails – 如何将Rails时区名称映射到PostgreSQL?

ruby-on-rails – 如何将Rails时区名称映射到PostgreSQL?,第1张

概述我需要使用类似的查询 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的时区选项. 但问题是Rails和PG的时区并不完全对应1对 我需要使用类似的查询
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的时区选项.

但问题是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

根据文档:

Keys are Rails TimeZone names,values are TZInfo IDentifIErs.

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

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

后者采用标识符方法,该方法应包含所需的字符串.

总结

以上是内存溢出为你收集整理的ruby-on-rails – 如何将Rails时区名称映射到PostgreSQL?全部内容,希望文章能够帮你解决ruby-on-rails – 如何将Rails时区名称映射到PostgreSQL?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1269838.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存