如何在Rails 5.2中将伊朗时区设置为UTC+3:30而非UTC+4:30
伊朗固定UTC+3:30时区解决方案(Ruby 2.6.5 + Rails 5.2)
由于旧版本Ruby/Rails依赖的时区数据库(tzdata)可能未更新伊朗取消夏令时的规则,以下是三种可行方案:
方案1:直接使用固定偏移时区(最稳妥)
绕过系统时区规则,强制使用UTC+3:30的固定偏移。在config/application.rb中修改配置:
# 定义自定义固定时区 config.time_zone = ActiveSupport::TimeZone.new("Iran Fixed UTC+3:30", 3.5 * 3600)
此方法不依赖tzdata的规则更新,直接固定偏移量,彻底避免夏令时切换问题。
方案2:更新tzdata时区数据库
Ruby的时区数据来自tzdata gem,2021a及以后的版本已包含伊朗取消夏令时的规则。执行以下步骤:
- 查看当前tzdata版本:
gem list tzdata - 更新tzdata(如果项目用bundler):
bundle update tzdata - 在
config/application.rb中设置标准德黑兰时区:config.time_zone = "Tehran"
更新后,Rails会自动应用最新规则,不再执行夏令时切换。
方案3:手动覆盖时区规则(针对无法更新tzdata的场景)
如果项目依赖限制无法更新tzdata,可在初始化文件中手动覆盖时区规则:
在config/initializers/time_zone.rb中添加:
# 创建自定义固定偏移时区,替代原Tehran时区 CustomTehranTimeZone = ActiveSupport::TimeZone.new("Custom Tehran", 3.5 * 3600) Rails.application.config.time_zone = CustomTehranTimeZone
内容的提问来源于stack exchange,提问作者Mehdi Daalvand
相关产品推荐
相关产品推荐

