【发布时间】:2011-05-26 22:48:11
【问题描述】:
在保持时区不变的同时读取、写入和序列化日期和时间变得很烦人。我正在使用 Ruby(和 Rails 3.0)并试图更改 DateTime 的时区。 (到 UTC)但不是时间本身。
我想要这个:
t = DateTime.now
t.hour
-> 4
t.offset = 0
t.hour
-> 4
t.utc?
-> true
我最接近的是这个,但它不直观。
t = DateTime.now
t.hour
-> 4
t += t.offset
t = t.utc
t.hour
-> 4
t.utc?
-> true
有没有更好的办法?
【问题讨论】:
-
如果您实际上使用“现在”作为时间戳,那么将其作为同一时间的 UTC 标记版本存储在数据库中是一个谎言,对吗?当系统的所有部分都使用 UTC 时,我个人遇到的麻烦最少,并且只有在视图中我可能会调整以显示在服务器或浏览器的时区中。
-
这很困难,因为我正在从时区未知或不相关的 CSV 文件中读取日期,因此我将它们作为 UTC 存储在数据库中。但是当使用本地区域的日期(即大于
2010/01/01 8:00 pm)进行查询时,它首先将该时间转换为UTC(我的问题的根源),然后再在查询中使用它。我试图让整个应用程序与时区无关,以便用户可以加载时间在 7:00 - 8:00 范围内的 CSV 文件,然后查询 7:00 - 8:00 并让它返回同一组记录。相反,Ruby 假定解析的时间在本地区域中。
标签: ruby-on-rails ruby datetime timezone ruby-on-rails-3