在什么条件下我想在rails中设置不同的应用程序级时区?

Tom*_*man 2 ruby timezone ruby-on-rails

几乎每一个environment.rb都有一条线config.time_zone = 'UTC'.

这条线究竟做了什么,在什么情况下我想改变它(例如config.time_zone = 'EST')?

rya*_*anb 6

设置config.time_zone更改Rails应用程序的默认时区.这是所有时间都将显示给您的用户的时区.它也是设置属性时所采用的时区.

但是,Rails将始终以UTC格式存储数据库中的时间.翻译发生在幕后,所以(大多数时候)你不必担心它.

将此时区更改为大多数用户所在的时区是很常见的.您可以运行此rake任务以查看可供选择的所有时区.

rake time:zones:all
Run Code Online (Sandbox Code Playgroud)

在每个请求的基础上更改当前时区也非常容易,允许每个用户配置它们所在的时区.这是您可能添加到应用程序控制器的前一个过滤器示例.

before_filter :set_user_time_zone

private

def set_user_time_zone
  Time.zone = current_user.time_zone if logged_in?
end
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅此Railscasts剧集.


Jef*_*ire 6

只是为Ryan的优秀答案添加一点.如果你想把它设置为东部时间,它就不会

config.time_zone = 'EST'
Run Code Online (Sandbox Code Playgroud)

这将是

config.time_zone = 'Eastern Time (US & Canada)'
Run Code Online (Sandbox Code Playgroud)

使用以下时区之一获取可用选项列表:

rake time:zones:all
rake time:zones:local
rake time:zones:us
Run Code Online (Sandbox Code Playgroud)