【问题标题】:How to handle date/times in POST parameters?如何处理 POST 参数中的日期/时间?
【发布时间】:2011-02-22 03:25:29
【问题描述】:

默认情况下,Rails 的 config.time_zone 是 UTC。因此,created_atupdated_at 等字段以 UTC 格式保存。

现在,假设用户的时区是太平洋标准时间 (PST)。

为了在用户的时区中显示日期和时间,我将Time.zone 设置为 PST。

现在,当用户在表单中输入日期(用户的本地时区,即 PST)时,控制器会根据 Time.zone 的设置接收该日期。

但是,我想以 UTC 格式将所有时间保存在数据库中。

那么,我将如何将参数哈希中的任何日期/时间字段就地转换为 UTC?我想知道是否有 Rails 可以自动进行转换的解决方案?

我希望将收到的任何日期时间字段的任何日期/时间转换为 UTC,而不必在每个控制器中编写转换代码。

更新

我通过将 Time.zone 设置为 Pacific Time (US & Canada) 以及 Eastern Time (US & Canada) 进行测试,然后保存模型。两种情况下的created_at 时间都是UTC。这证实了设置Time.zone 对Rails 在created_at 字段中保存的时间没有影响。该值仅受config.time_zone 影响(如果未在application.rb 中定义,则默认为UTC)

我对这一切感到很困惑!

【问题讨论】:

    标签: ruby-on-rails-3


    【解决方案1】:

    在数据库中,所有日期始终保存为 UTC。 config.time_zone 参数设置 Time.zone 的默认值,仅用于显示。因此,您无需执行任何操作即可获得所需的行为,只需为用户正确设置 Time.zone,其余的由 rails 处理。

    【讨论】:

    • 根据我的测试,这似乎不是真的。请查看我的问题以获取更新。
    • 我不认为我遵循,您的更新重申了我所说的:config.time_zone 不会影响日期在数据库中的存储方式,它始终存储为 UTC。它确实 影响的是通过模型访问器方法之一检索日期时使用的默认时区。例如 Model.created_at 将在 config.time_zone 指定的时区返回,除非您设置 Time.zone 来覆盖它。
    • 如果您想手动从一个时区转换到另一个时区,您可以使用方法:in_time_zone,如下所示:model.created_at.in_time_zone('Eastern Time (US & Canada)')
    • 是的,你是对的。我对我一直在做的所有与时间相关的事情感到非常困惑:(我讨厌时区!
    • 也许你也可以看看我的(还有一个!)关于时区的问题?:stackoverflow.com/questions/5073917/…
    猜你喜欢
    • 2011-03-16
    • 2017-03-10
    • 1970-01-01
    • 2014-05-04
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多