【问题标题】:How to handle time difference in Rails application?如何处理 Rails 应用程序中的时差?
【发布时间】:2011-08-11 12:26:37
【问题描述】:

在我的 Rails 应用程序中,我想将用户的last_login 时间存储在数据库中。然后我想向用户显示last_login 时间基于他的当地时间(即如果用户现在在加拿大,它应该是X,如果用户现在在澳大利亚,它应该是Y)。 p>

问题 1

您建议如何处理时差?我应该将转换为 UTC 的 last_login 存储在数据库中,并在显示时将其再次转换为本地时间,还是有更好的方法?

问题 2

我如何识别本地时区以显示 last_login

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 timezone


    【解决方案1】:

    我认为您将last_login_at 存储为UTC(或任何服务器时间)是正确的。它将默认存储在那个时间。然后您可以将其转换为用户本地时间:

    user.last_login_at.in_time_zone('Eastern Time (US & Canada)')
    

    在 Rails Api 中,您可以找到有关 timezonestime with zone 的更多信息。

    要确定用户时区,您可以使用一些 GeoIP 工具,例如 this one(按照那里的说明)。但这不是 100% 准确的检测。让用户在注册时选择时区的最可靠方式。

    要收集您可以运行的所有时区:

    ActiveSupport::TimeZone.all.map(&:name)
    

    【讨论】:

      猜你喜欢
      • 2016-11-28
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 2018-04-01
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      相关资源
      最近更新 更多