Rails で設定するために application.rb オーダーの config.time_zone に渡すことができる独自のタイム ゾーンを取得する方法を探しています。背景: ユーザーが yaml 構成でタイムゾーンを指定できるようにしていますが、設定されていない場合は、ボックスのタイムゾーンを明示的に使用したいと考えています。表示用にタイムゾーンを変換するための参照として使用しているため、値を設定する必要があります。Rails アプリにログインしている各ユーザーは、自分のタイムゾーンを設定でき、私が変換を行います。
ただし、Ruby や Rails でこれを行うための適切な API はないようです。Time.now.zone は 3 文字のコード (EDT や CDT など) を返しますが、十分に具体的ではないため、これを渡すことはできません。TZInfo クラスは「長い」説明のみを受け入れます。
これが私が今やっていることです。これはかなりハッキーなようです:
time_zone = CONFIG[:time_zone] # set your local time zone here. use rake time:zones:local to choose a value, or use UTC.
unless time_zone
# try to detect one
if File.exists?('/etc/localtime')
path = File.readlink('/etc/localtime')
items = path.split("zoneinfo/")
if items.length == 2
time_zone = items[1]
end
end
unless time_zone
puts "*** Warning: no time zone is set in config/config.yaml and could not detect system time. Using UTC as the default time; behavior may be unexpected."
time_zone = "UTC"
end
end
config.time_zone = time_zone
もっと良いアイデアはありますか?