【问题标题】:Rails 3.1 and the right time saved into DBRails 3.1 和正确的时间保存到 DB
【发布时间】:2011-12-05 14:06:39
【问题描述】:

已经有几个小时我正在努力将时间存储到数据库表中。时间像 -1h 一样保存在那里。我不知道如何以正确的形状(= +1h)巧妙地从数据库中打印时间。我尝试了设置时区和类似的东西,但不幸的是,我没有任何效果。

所以作为解决方案我选择这种方式:

@my_obj.created_at+3600 # +1 hour

有更好的方法吗?

【问题讨论】:

  • 您是否要在 +1 时区显示时间?还是您刚刚注意到与您所在的时区有 1 小时的差异?您会看到夏令时错误吗?
  • "您是否要显示 +1 时区的时间?" - 我该怎么做?
  • 在显示时转换为“本地”时间。
  • 是的,我试过了。但结果是,在我的本地机器上它运行得非常好,但问题是当我将我的应用程序部署到 Heroku 时 - 还有其他“本地时间”(-9h,而不是中欧)
  • 是的 - 这是因为服务器将有自己的本地时间。这只是意味着您必须在自己的服务器中声明时区。如果您不这样做,它将简单地默认为服务器场所在的位置。我将编辑我的答案以反映这一点。

标签: ruby database ruby-on-rails-3 time ruby-on-rails-3.1


【解决方案1】:

设置服务器的时区后,您可以使用:

ActiveSupport::TimeZone.utc_to_local(@my_obj.created_at)

?

欲了解更多信息:请在此处查看有关此方法的 apidock:http://apidock.com/rails/ActiveSupport/TimeZone/utc_to_local

如果您需要覆盖服务器的本地时区,您可以在 ApplicationController 中将其设置为 before_filter:

before_filter :set_time_zone

def set_time_zone
  Time.zone = 'London'
end

再次 apidock 有助于了解更多信息:http://apidock.com/rails/Time/zone%3D/class

如果您不想依赖服务器的本地时区,您可以随时使用:

@my_obj.created_at.in_time_zone('London')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多