ruby-on-rails - Rails : Set config. time_zone 到服务器的时区?

标签 ruby-on-rails ruby date datetime

出于兼容性原因,我需要在服务器的本地时区中存储和显示所有日期。为此,我在 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/

相关文章:

ruby-on-rails - 如何让第一个用户成为 Devise gem 的管理员?

ruby-on-rails - 使用 For 循环创建编号列表

ruby - 为 ruby​​ 套接字定义的 MSG_ 选项在哪里?

ruby - 使用Ruby进行离线地理计算,可以完成吗?

javascript - 错误: bad URI when sending data as JSON with GET method to a Rails resource

python - (英语、Perl、Python、Ruby)逐个代码片段进行比较?

c - 如何将(长)日期转换为 C 中可读的格式?

javascript - 无法在 Chart.js 时间轴上显示正确的时间

最近2小时的Mysql结果集

ruby-on-rails - 注释掉 `wrap_parameters` 初始化器可以吗?