Rails: Set config.time_zone to the server's time zone?
出于兼容性原因,我需要在服务器的本地时区存储和显示所有日期。为此,我在
1 2 | # Do not convert database DATETIME / DATE columns to UTC: config.active_record.default_timezone = :local |
当我存储它们存储在服务器的本地时区的日期时,它可以正常工作。但是,当检索数据时,Rails会将其转换为UTC,因此例如
如何让Rails不将其转换为UTC?
我认为将应用程序时区设置为服务器的本地时区将有所帮助,因此我想将
1 | config.time_zone = Time.now.zone |
但它的问题是它返回一个三字符时区代码,如
如何将三个字符代码翻译为全时区名称?或者,我如何获得本地时区名称?或者,如何配置Rails以不将数据库日期转换为UTC?
只需输入"Bogota"作为
更新
根据评论,OP希望能够在操作系统级别设置Ubuntu中的时区,然后使用该设置配置Rails而无需任何额外步骤。
所以@Sergio,好消息是您可以将
1 | config.time_zone ="America/Bogota" |
所以你需要做的就是弄清楚如何从你的操作系统中获取它,我认为它应该是
1 | config.time_zone = File.read("/etc/timezone").chomp |
怎么样
我需要做类似的测试。我们的一些测试依赖于在浏览器日历中选择的日期,但由于时区设置,深夜服务器浏览器和Rails后端在不同的日期。
我最终使用了以下内容:
配置/环境/ test.rb
1 2 3 4 5 | ... config.time_zone = ActiveSupport::TimeZone[Time.now.strftime('%z').gsub('0', '').to_i] ... |
这会将服务器时区的偏移量作为整数小时数进行抓取,并根据该时区计算配置的时区。这有用性有限,因为每个偏移有多个时区。但由于我只需要匹配测试的时间,这对我的用例来说已经足够了。
如果时区可以从服务器时区短代码(