2

我正在构建一个 Rails 应用程序,用户可以在其中发布他们知道的面试详细信息。表单有一个输入字段面试时间,即日期时间选择器。我想为这个应用程序提供普遍支持。

实际问题:

假设我在我的生产服务器中配置了 IST 时区。那么如果来自日本的用户选择了一个面试时间,它将在 IST 时区中解析。结果将是一个错误的面试时间。

显示正确的面试时间。

1.我需要从用户那里获取时区吗?(可能是一个选择框)

2.有没有其他选项可以自动检测时区?

谢谢各位:)

如果有不清楚的地方,请在问题下方添加评论。

4

2 回答 2

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数据库中的一个字段),和/或使用选择助手来生成选择字段。

于 2012-05-07T11:49:15.113 回答
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
于 2012-05-07T13:12:56.243 回答