在Ruby / Rails中处理没有时区的时间/日期时间

时间:2017-08-31 21:00:50

标签: ruby-on-rails ruby

我正在构建一个拥有商家数据库的应用程序,它们具有开放/关闭时间等属性,例如: 9:00 – 18:00。还有很多其他对象有一些时间/日期信息关联。

这些对象位于不同的时区,应用程序通常不关心它们的确切位置。网站编辑者和应用的最终用户也在不同的时区。

我正在寻找一个非常简单的事情 - 我希望编辑器提交的日期/时间对象与提交时完全一致,然后最终用户应该看到完全相同的日期/时间值。

在JavaScript-land中一切都很好,Postgres也很乐意保存我给它的任何日期时间,但是Rails尝试在任何地方应用它的时区逻辑 - 我不希望它既不是UTC,也不是本地的,没有任何其他时区 - 我只想存储原始值 - 而且Ruby(和Rails)似乎根本就没有这么简单的概念。

我真的不想将日期/时间存储为数字或字符串,我也不想使用ruby Time对象,因为它们似乎总是有时区的概念。

所以我想知道 - 是否有任何ruby库来处理没有区域的日期/时间?

谢谢

1 个答案:

答案 0 :(得分:1)

Rails为所有DateTime列添加时区,从Rails 5.1开始,Time列也可识别时区。默认情况下,它们将作为UTC保存在数据库中,然后在调用时以UTC或您在application.rb中指定的时区返回给您。因此,存储DateTimeTime的时区并没有真正的出路,但您可以根据需要显示这些值。

您可以使用strftime方法更改DateTimeTime对象的显示方式,并使用this helpful site进行游戏。

或者,如果您不关心使用与DateTimeTime相关联的任何方法,则可以将此信息另存为字符串。我建议采用默认的UTC行为,而不要担心太多,因为如果一切都保存为UTC并且你没有在application.rb设置时区,那么你可以指望总是得到相同的值在您需要时返回给您。