我想将事件保存在默认时区,即每当用户提交事件时,它都会转换为默认时区并保存在数据库中。
每当用户请求事件时,系统都会找到该用户的时区,并将日期(从默认格式)转换为该用户时区,并将其显示给用户。
很难从哪里开始,我看到了很多笔记和文档,但无法弄清楚这样做的完整过程。
我看到了这段代码,但无法理解如何使用它:
before_filter :set_time_zone
def set_time_zone
Time.zone = current_user.time_zone if current_user
end
数据库中的默认时区是 UTC。
有两种方法可以做到这一点:
- 允许用户将其时区存储在数据库中
- 从他们的 IP 中获取他们的时区
对于选项 1,Rails 对时区有很好的支持。#all 方法将允许您创建一个下拉列表供他们选择。然后将其与用户记录一起保存在数据库中。
选项 2 对用户来说工作量较少,但准确性也较低。有一些服务可以将 IP 转换为时区。
要显示给定时区的时间,请使用 Time#in_time_zone,或者您可以按上述方式设置Time.zone
,它应该会正确显示。