Rails中的时区

Ved*_*Ved 6 timezone ruby-on-rails internationalization

我有一个应用程序,我想让用户设置时区.当用户创建提醒条目时,该条目将以UTC格式存储在db中.但是当他在应用程序中打开日历条目时,他应该在他选择的时区中看到该条目.我正在使用慢性但这在这里并不重要.
在我的ApplicationController.rb,我有以下字符串:

before_filter :set_user_time_zone
...
def set_user_time_zone
    Time.zone = current_user.timezone if user_signed_in?
end
Run Code Online (Sandbox Code Playgroud)

在此之后,条目仍然以UTC保存,但具有时差.例如,我将时区设置为 - "Delhi",即UTC的+530.当我想保存"Jan,16 - 12:15 AM"的日历条目时 - 数据库填充"2011-01-15 18:45:19 UTC" - 所以它比我想要的实际时间早5:30保存.
在UI中我也会看到此条目,而不是当前用户时区中显示的时间.

我想知道在rails中处理这种时区特征应该是什么样的正确方法.

Pra*_*ela 9

在数据库中,您需要以UTC格式存储时间,而不是需要在用户的时区中将其转换为UI.

rails控制台中的示例:

Time.zone = "New Delhi"         #=> "New Delhi"

Time.now                        # => 2011-01-15 16:45:18 -0600

Time.now.in_time_zone           # => Sun, 16 Jan 2011 04:15:26 IST +05:30
Run Code Online (Sandbox Code Playgroud)