You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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及以后的版本已包含伊朗取消夏令时的规则。执行以下步骤:

  1. 查看当前tzdata版本:
    gem list tzdata
    
  2. 更新tzdata(如果项目用bundler):
    bundle update tzdata
    
  3. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:52:13