2017-08-31 39 views
1

我正在构建一个具有企业数据库的应用程序,并且它们具有开始/结束时间等属性。 9:00 – 18:00。还有一大堆其他对象有一些时间/日期信息关联。在Ruby/Rails中处理没有时区的时间/日期时间

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

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

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

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

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

谢谢

+1

_“我不希望它既不是UTC,也不是本地的,也不是任何其他时区” - 由于JavaScript Date数据库实例也有时区信息,并且_“在JavaScript-land中一切都很好” ,我不明白为什么这应该成为Ruby/Rails中的问题。你能举个例子吗? – Stefan

回答

1

Rails添加对Rails 5.1的所有DateTime列的时区和启动,Time列也时区察觉。它们将默认保存为数据库中的UTC,然后在被调用时以UTC或您在application.rb中指定的时区返回给您。所以,在存储DateTimeTime的时区中并没有真正的出路,但您可以根据需要显示这些值。

您可以使用如何改变你的DateTimeTime对象的显示和使用this helpful site用于玩了的strftime方法。

或者,如果您不关心使用与DateTimeTime相关联的任何方法,则可以将此信息保存为字符串。我建议拥抱默认的UTC行为,但不要担心太多,因为如果所有内容始终保存为UTC,并且您没有在application.rb中设置时区,那么您可以依靠总是获得相同的值返回给您当你需要它们时。