我正在构建一个Rails应用程序,用户可以在其中发布他们知道的访谈详细信息。表单有一个输入字段访问时间,即日期时间选择器。我希望为此应用程序提供通用支持。
实际问题:
我们说我已在生产服务器中配置了IST时区。然后,如果来自日本的用户选择将在IST时区解析的访谈时间。结果将是不正确的访问时间。
显示正确的面试时间。
1.我是否需要从用户那里获取时区?(可能是选择框)
2.是否还有其他选项可以自动检测时区?
谢谢大家:)
如果问题不明确,请在问题下方添加评论。
答案 0 :(得分:3)
我有类似的问题。我保留了默认的rails配置,所以所有时间都以UTC格式存储在数据库中,我使用ActiveSupport::TimeZone中的以下方法:
当我需要从表单中保存日期时,我使用local_to_utc
将日期从本地转换为UTC:
ActiveSupport::TimeZone[my_timezone].local_to_utc(date)
当我需要从数据库显示日期时,我使用了
ActiveSupport::TimeZone[my_timezone].utc_to_local(date)
这样,数据库中保存的所有日期都是UTC,但是由当地时间的用户处理,每个用户可以有所不同。您可以将时区存储在User
级别(数据库中的string
字段),和/或使用select helper生成选择字段。
答案 1 :(得分:1)
Baldrick的答案是对的 - 您应该将时间存储在UTC中并将每个用户的时区存储在用户的记录中。
此外,用户经常想看到的是当地时间的位置。
为此,在存储UTC时间时,还要存储创建事件的用户的时区。
所有这一切的棘手部分是MySQL和许多其他数据库不存储具有日期/时间的时区。因此,除非您将时区信息显式存储在其他字段中,否则时区信息将丢失。
因此,您需要在数据库中使用两个字段:
event_time_utc: Datetime, # UTC timezone for when the event happened
event_timezone: string # the timezone of where the event happened