33

メソッドはどのようにして現在のTime.zoneを取得し、それをで使用できる形式に変換できActiveSupport::TimeZone[some_zone].parse()ますか?

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)
4

1 に答える 1

57

使用する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)

(要求に応じて)これを取得した方法については、nameメソッドがに存在することを知っていTime.zoneます。しかし、これを心から知らなかった場合は、ドキュメントを確認します。あなたが言うようにそれがそこにない場合(そしてそれはここにあります) 、私は通常、 Pryを使用してクラス/モジュール/オブジェクトを検査します。Pryはirbの代替手段であり、次のようなことができます。

[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上記の行[2]は、オブジェクトのメソッドを出力します(右にスクロールすると、nameそこにリストが表示されます)。中にあるオブジェクトを直接[3]呼び出して、探している出力を取得できることがわかります。nameTime.zone

于 2012-12-15T00:30:34.413 に答える