Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 莫斯科当地时间的轨道TZInfo偏移不正确_Ruby On Rails 4_Timezone_Localtime_Tzinfo - Fatal编程技术网

Ruby on rails 4 莫斯科当地时间的轨道TZInfo偏移不正确

Ruby on rails 4 莫斯科当地时间的轨道TZInfo偏移不正确,ruby-on-rails-4,timezone,localtime,tzinfo,Ruby On Rails 4,Timezone,Localtime,Tzinfo,我已在application.rb中将Rails时区设置为“莫斯科” 当我询问本地时间时,它返回一个比实际本地时间提前一小时的值 我如何解决从错误时间到本地转换的问题 2.0.0-p481 :003 > Time.zone => #<ActiveSupport::TimeZone:0x000000058a5750 @name="Moscow", @utc_offset=nil, @tzinfo=#<TZInfo::TimezoneProxy: Europe/Moscow

我已在application.rb中将Rails时区设置为“莫斯科”

当我询问本地时间时,它返回一个比实际本地时间提前一小时的值

我如何解决从错误时间到本地转换的问题

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>
2.0.0-p481:003>时区
=> #
2.0.0-p481:004>现在时间
=> 2015-09-14 10:37:39 +0000
2.0.0-p481:005>Time.current
=>2015年9月14日星期一14:37:44 MSK+04:00
2.0.0-p481:006>tz=TZInfo::Timezone.get('欧洲/莫斯科')
=> #
此处为时间。当前时间应返回2015年9月14日星期一13:37:44 MSK+03:00

PS


Rails.version==“4.2.1”

看起来您使用的是的过期副本。2014年10月,欧洲/俄罗斯时区将时钟从+04:00永久调回+03:00。此更改已包含在时区数据库的中

Rails(通过TZInfo)将从系统的zoneinfo目录或TZInfo数据gem获取时区数据。您可以通过运行以下命令来检查正在使用的数据源:

TZInfo::DataSource.get.to_s
如果返回
“Zoneinfo数据源:/path/to/Zoneinfo”
,则从指定目录读取过期数据。通过从操作系统分发服务器安装更新,您可能能够更新时区数据

如果
DataSource.get
返回
“Ruby DataSource”
,则您使用的是tzinfo数据gem的旧版本(版本1.2014.6之前)。要更新,请删除
gem文件中
gem'tzinfo data'
行上的任何版本约束,然后运行
bundle update


如果您正在使用系统zoneinfo目录,但无法对其进行更新,则可以通过将
gem'tzinfo data'
添加到gem文件并运行
bundle install

来切换到使用tzinfo数据gem。看起来您使用的是的过期副本。2014年10月,欧洲/俄罗斯时区将时钟从+04:00永久调回+03:00。此更改已包含在时区数据库的中

Rails(通过TZInfo)将从系统的zoneinfo目录或TZInfo数据gem获取时区数据。您可以通过运行以下命令来检查正在使用的数据源:

TZInfo::DataSource.get.to_s
如果返回
“Zoneinfo数据源:/path/to/Zoneinfo”
,则从指定目录读取过期数据。通过从操作系统分发服务器安装更新,您可能能够更新时区数据

如果
DataSource.get
返回
“Ruby DataSource”
,则您使用的是tzinfo数据gem的旧版本(版本1.2014.6之前)。要更新,请删除
gem文件中
gem'tzinfo data'
行上的任何版本约束,然后运行
bundle update


如果您正在使用系统zoneinfo目录,但无法更新它,则可以通过将
gem'tzinfo data'
添加到gem文件并运行
bundle install

来切换到使用tzinfo数据gem,非常感谢!!!我升级了tz数据包并重新配置了它。现在时间还行。很好的解释,节省了我的时间。非常感谢。非常感谢你!!!我升级了tz数据包并重新配置了它。现在时间还行。很好的解释,节省了我的时间。非常感谢。