Rails TZInfo 莫斯科当地时间的偏移量不正确

Rails TZInfo incorrect offset for Moscow local time

我在 application.rb 中将 Rails 时区设置为 'Moscow'。

当我询问当地时间时,它 return 是一个比实际当地时间早一小时的值。

如何解决不正确的本地转换时间?

2.0.0-p481 :003 > Time.zone
 => #<ActiveSupport::TimeZone:0x000000058a5750 @name="Moscow", @utc_offset=nil, @tzinfo=#<TZInfo::TimezoneProxy: Europe/Moscow>, @current_period=#<TZInfo::TimezonePeriod: #<TZInfo::TimezoneTransitionDefinition: #<TZInfo::TimeOrDateTime: 1301180400>,#<TZInfo::TimezoneOffset: 14400,0,MSK>>,nil>>
2.0.0-p481 :004 > Time.now
 => 2015-09-14 10:37:39 +0000
2.0.0-p481 :005 > Time.current
 => Mon, 14 Sep 2015 14:37:44 MSK +04:00
2.0.0-p481 :006 > tz = TZInfo::Timezone.get('Europe/Moscow')
 => #<TZInfo::DataTimezone: Europe/Moscow>

这里Time.current应该returnMon, 14 Sep 2015 13:37:44 MSK +03:00

PS

Rails.version == '4.2.1'

您似乎正在使用时区数据库 IANA Time Zone database. The Europe/Russia time zone set the clocks back from +04:00 to +03:00 permanently in October 2014. This change was included in the 2014f release 的过时副本。

Rails(通过 TZInfo)将从系统的 zoneinfo 目录或 tzinfo-data gem 获取时区数据。您可以检查 运行ning:

使用了哪个数据源
TZInfo::DataSource.get.to_s

如果此 returns "Zoneinfo DataSource: /path/to/zoneinfo" 则正在从指定目录中读取过时的数据。您可能可以通过从您的操作系统经销商处安装更新来更新您的时区数据。

如果 DataSource.get returns "Ruby DataSource",那么您使用的是旧版本的 tzinfo-data gem(1.2014.6 之前的版本)。要更新,请删除 Gemfilegem 'tzinfo-data' 行的任何版本限制,然后是 运行 bundle update.

如果您正在使用您的系统 zoneinfo 目录,但无法更新它,那么您可以通过将 gem 'tzinfo-data' 添加到您的 Gemfile 和 运行 来切换到使用 tzinfo-data gem宁bundle install.