Rails中的时区

时间:2011-01-15 18:54:01

标签: ruby-on-rails internationalization timezone

我有一个应用程序,我想让用户设置时区。当用户创建提醒条目时,该条目将以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

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

我想知道在rails中处理这种时区功能的正确方法是什么。

1 个答案:

答案 0 :(得分: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