寻找一种方法来获取我自己的时区,我可以在 application.rb 中传递给 config.time_zone 以便在 Rails 中设置它。背景:我允许用户在 yaml 配置中指定他们的时区,但如果没有设置,我想明确使用框的时区。我必须设置一个值,因为我将它用作转换时区以供显示的参考——每个登录到 Rails 应用程序的用户都可以设置他们的个人时区,我将为他们进行转换。
但是,在 Ruby 或 Rails 中似乎没有很好的 API 来执行此操作。Time.now.zone 返回 3 个字母的代码(例如 EDT 或 CDT),但您不能传递它,因为它不够具体—— TZInfo 类将只接受“长”描述。
这就是我现在正在做的事情,这看起来很hacky:
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
有更好的想法吗?