2012-12-14 15 views
24

一個方法如何使用當前的Time.zone並將其放入可供ActiveSupport::TimeZone[some_zone].parse()使用的格式?在Rails中,如何獲取可用於ActiveSupport :: TimeZone [zone] .parse()的格式的當前時區(Time.zone)?

這似乎很奇怪,Time.zone.to_s返回不能ActiveSupport::TimeZone[zone].parse()

Time.zone.to_s回報"(GMT-08:00) Pacific Time (US & Canada)"

ActiveSupport::TimeZone["(GMT-08:00) Pacific Time (US & Canada)"]使用的字符串是nil

ActiveSupport::TimeZone["(GMT-08:00) Pacific Time (US & Canada)"] 
=> nil 

ActiveSupport::TimeZone["Pacific Time (US & Canada)"] 
=> (GMT-08:00) Pacific Time (US & Canada) 

回答

36

使用Time.zone.name,不Time.zone.to_s

[1] pry(main)> Time.zone.to_s 
=> "(GMT-05:00) Eastern Time (US & Canada)" 
[2] pry(main)> Time.zone.name 
=> "Eastern Time (US & Canada)" 
[3] pry(main)> ActiveSupport::TimeZone[Time.zone.name] 
=> (GMT-05:00) Eastern Time (US & Canada) 

至於我是如何得到這個(的要求),我只知道Time.zone存在name方法。如果我不知道這一點,但我會檢查文檔。如果它不是在那裏,你說(它是,here,我通常檢查與Pry類/模塊/對象。撬起是IRB的替代,讓我在上面的物體上打印的方法[2]線做類似

[1] pry(main)> cd Time.zone 
[2] pry(#<ActiveSupport::TimeZone>):1> ls -m 
Comparable#methods: < <= == > >= between? 
ActiveSupport::TimeZone#methods: <=> =~ at formatted_offset local local_to_utc name now parse period_for_local period_for_utc to_s today tzinfo utc_offset utc_to_local 
self.methods: __pry__ 
[3] pry(#<ActiveSupport::TimeZone>):1> name 
=> "Eastern Time (US & Canada)" 

ls -m(如果你向右滾動,你會看到那裏列出name。您可以在[3]中看到,我可以直接撥打name,查看我在裏面的Time.zone對象並獲取您要查找的輸出。

+0

真棒謝謝你......看着文檔,從來沒有看到它。很想知道,如何找到這種東西? – jpwynn

+0

我更新了我的答案,以解釋我可能會如何找到它。 – deefour

相關問題