2017-09-20 3 views
1

Comment puis-je convertir l'objet temps de support actif converti en chaîne en objet, En d'autres termes, comment puis-je trouver l'objet de support actif à partir de sa chaîne?Convertir l'objet de fuseau horaire de support actif en objet en rails

Exemple:

a = ActiveSupport::TimeZone.all.first = 
#<ActiveSupport::TimeZone:0x007f8c45bc1848 @name="American Samoa", 
@tzinfo=#<TZInfo::TimezoneProxy: Pacific/Pago_Pago>, @utc_offset=nil> 

Si je convertir cet objet à une chaîne à l'aide to_s, je reçois "(GMT-11: 00) Samoa américaines". Comment puis-je trouver l'objet si j'ai "(GMT-11: 00) Samoa américaines".

Répondre

1
# let 
timezone_string = '(GMT-11:00) American Samoa' 

# let's capture the "American Samoa" substring from above (as an example) 
matches = timezone_string.match /\(GMT.*?\) (.*)/ 
timezone_name = matches[1] 

# then we look up the corresponding Timezone object using the "American Samoa" timezone_name 
timezone = ActiveSupport::TimeZone[timezone_name] 
2

Cela permettra d'éliminer tout entre la première paire de parenthèses et de saisir la chaîne restante:

a = ActiveSupport::TimeZone.all.first.to_s.match(/\(.*?\) (.*)/)[1] 

... et que vous pouvez trouver l'objet ActiveSupport::Timezone:

ActiveSupport::Timezone[a]

0

Merci pour les réponses je les ai essayées et cela fonctionne. J'ai aussi essayé cette

tz_value = business_timezone.split(')').second.strip 

qui me donne le nom et je trouve l'objet en utilisant

ActiveSupport::TimeZone[tz_value]. 
+0

Ohh pas. Ne fais pas ça. Parce qu'il y a un fuseau horaire qui a une chaîne comme celle-ci "Mountain Time (US & Canada)"; voir [ici] (http://api.rubyonrails.org/v5.1/classes/ActiveSupport/TimeZone.html). Cela signifie que le 'tz_value' ne sera pas correct. Ma réponse suit en fait la [documentation de Rails] (http://api.rubyonrails.org/v5.1/classes/ActiveSupport/TimeZone.html), dans laquelle j'ai regardé le code source de 'to_s()' pour obtenir le fuseau horaire précis d'une chaîne. –

+0

Oh, merci! Je vais le parcourir et modifier mon code en conséquence :) –

+0

Pas de problème !! :) –