Ser*_*gio 4 ruby datetime ruby-on-rails date
出于兼容性原因,我需要在服务器的本地时区中存储和显示所有日期。为此,我在以下配置了 rails 应用程序application.rb:
# Do not convert database DATETIME / DATE columns to UTC:
config.active_record.default_timezone = :local
Run Code Online (Sandbox Code Playgroud)
当我将日期存储在服务器的本地时区中时,它可以正常工作。然而,当检索数据时,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
Run Code Online (Sandbox Code Playgroud)
但它的问题在于它返回一个三个字符的时区代码,如COTconfig.time_zone 需要一个时区名称,如Bogota
如何将三个字符的代码转换为完整的时区名称?或者,如何获取本地时区名称?或者,如何配置 Rails 以不将数据库日期转换为 UTC?
只需输入“Bogota”作为字符串,config.time_zone并config.active_record.default_timezone设置为:local您应该得到您需要的。本地时区中的数据库(我希望是 Bogata 的 TZ)以及 Bogata 的 TZ 中的模型属性。
根据评论,OP 希望能够在操作系统级别的 Ubuntu 中设置时区,然后使用该设置来配置 Rails,而无需任何额外步骤。
所以@Sergio,好消息是您可以设置config.time_zone为您在使用 Ubuntu 工具时熟悉的 IANA 时区名称,即。你可以这样做:
config.time_zone = "America/Bogota"
Run Code Online (Sandbox Code Playgroud)
所以你需要做的就是弄清楚如何从你的操作系统中获取它,我认为它应该是这样的内容/etc/timezone:
config.time_zone = File.read("/etc/timezone").chomp
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7443 次 |
| 最近记录: |