使用UTC与续集?

时间:2009-07-11 21:49:06

标签: ruby sequel

我不希望在我当地的时区存储时间,但续集对我来说真的很难。我可以在将它们放入那里之前将它们设置为UTC(有点痛苦),但是当我把它们取出时它假定它们是本地日期然后它们将来都是8小时。这件事还没有实现吗?如果是这样,有没有解决方法?谢谢!

3 个答案:

答案 0 :(得分:21)

此时有点过时,但我相信自最初的答案发布以来,此处的最佳解决方案已发生变化。如果你设置

Sequel.default_timezone = :utc

续集会将所有时间都视为UTC,并且不会出现问题中描述的行为。

http://sequel.jeremyevans.net/rdoc/classes/Sequel/Timezones.html

了解更多信息

答案 1 :(得分:5)

我自己也有一个非常相似的问题。

此信息取自Sequel RDoc

  

续集可以使用Time或DateTime   从数据库返回的时间。   它默认为时间。要将其更改为   DateTime,使用:

Sequel.datetime_class = DateTime

另外,请确保您没有将时区信息存储在数据库中。 我正在使用Postgres,列类型为没有时区的时间戳

这会导致显示的日期/时间为UTC。在 2009-07-13T03:22:53Z 的日期/时间内通过时,结果显示为 2009-07-13T03:22:53 + 00:00

答案 2 :(得分:3)

尝试将它们作为UTC放入的最简单方法是覆盖用于返回UTC时间的文字字符串的数据集类的literal_datetime和/或literal_time。

以UTC格式取出它们取决于您使用的适配器。例如,postgres适配器调用Sequel.string_to_datetime,它只调用Sequel.datetime_class上的解析(默认为Time)。如果datetime列包含时区信息,那么事情应该可以正常工作。如果它不包含时区信息,Time.parse将假定它被赋予本地时间。在这种情况下,您可能希望覆盖Sequel.string_to_datetime以确保它始终返回UTC偏移的时间(可能通过调用Time.parse(s).gmtime)。