2015-09-14 4 views
1

J'ai défini le fuseau horaire Rails sur 'Moscow' dans l'application.rb.Rails TZInfo décalage incorrect pour l'heure locale de Moscou

Lorsque je demande l'heure locale, elle renvoie une valeur supérieure d'une heure à l'heure locale réelle.

Comment contourner cette heure incorrecte pour la conversion locale?

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> 

Ici Time.current devrait retourner Mon, 14 Sep 2015 13:37:44 MSK +03:00

PS

Rails.version == '4.2.1'

Répondre

2

Il semble que vous utilisez une copie de la date de IANA Time Zone database. Le fuseau horaire Europe/Russie a ramené définitivement les horloges de +04: 00 à +03: 00 en octobre 2014. Cette modification a été incluse dans le 2014f release de la base de données Time Zone.

Rails (via TZInfo) obtiendra des données de fuseau horaire à partir du répertoire zoneinfo de votre système ou de la gemme tzinfo-data. Vous pouvez vérifier la source de données est utilisée en exécutant:

TZInfo::DataSource.get.to_s 

Si elle retourne "Zoneinfo DataSource: /path/to/zoneinfo" ensuite des données de ce jour est en cours de lecture à partir du répertoire nommé. Vous pourrez probablement mettre à jour vos données de fuseau horaire en installant une mise à jour de votre distributeur de système d'exploitation. Si DataSource.get renvoie "Ruby DataSource", vous utilisez une ancienne version de la gemme tzinfo-data (antérieure à la version 1.2014.6). Pour mettre à jour, supprimez toutes les contraintes de version sur la ligne gem 'tzinfo-data' dans votre Gemfile, puis exécutez bundle update. Si vous utilisez votre répertoire systeminfo, mais que vous ne pouvez pas le mettre à jour, vous pouvez utiliser la gemme tzinfo-data en ajoutant gem 'tzinfo-data' à votre Gemfile et en exécutant bundle install.

+0

Merci beaucoup! J'ai mis à jour le paquet tz-data et l'ai reconfiguré. Maintenant, l'heure actuelle est OK. – zuba