出于兼容性原因,我需要在服务器的本地时区中存储和显示所有日期。为此,我在 application.rb
中配置了这样的 Rails 应用程序:
# Do not convert database DATETIME / DATE columns to UTC:
config.active_record.default_timezone = :local
当我存储存储在服务器本地时区中的日期时,它工作正常。但是,当检索数据时,Rails 将其转换为 UTC,例如 Post.find(1).posted
返回 2016-02-02 18:06:48 UTC
但它实际上在数据库中存储为 2016-02-02 13:06:48
。
如何防止 Rails 将其转换为 UTC?
我认为将应用程序时区设置为服务器的本地时区会有所帮助,所以我想将 config.time_zone
设置为服务器的本地时区并尝试:
config.time_zone = Time.now.zone
但它的问题在于它返回一个三字符时区代码,如 COT
并且 config.time_zone 需要一个时区名称,如 Bogota
如何将三字符代码翻译成完整的时区名称?或者,如何获取本地时区名称?或者,如何配置 Rails 不将数据库日期转换为 UTC?
最佳答案
只需输入“Bogota”作为 config.time_zone
的字符串并将 config.active_record.default_timezone
设置为 :local
你应该得到你需要什么。本地时区中的 DB(我希望是 Bogata 的 TZ)以及 Bogata 的 TZ 中的模型属性。
更新
根据评论,OP 希望能够在操作系统级别设置 Ubuntu 中的时区,然后使用该设置配置 Rails,而无需任何额外步骤。
@Sergio,好消息是您可以将config.time_zone
设置为the IANA timezone name您在使用 Ubuntu 工具时会很熟悉,即。你可以做:
config.time_zone = "America/Bogota"
所以你需要做的就是弄清楚如何从你的操作系统中获取它,我认为它应该是 /etc/timezone
的内容,所以:
config.time_zone = File.read("/etc/timezone").chomp
关于ruby-on-rails - Rails : Set config. time_zone 到服务器的时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35163429/