2009-07-11 30 views
6

我不想在当地时区存储时间,但续集让我感觉非常艰难。我可以在将它们放到那里之前将它们设置为UTC(有点痛苦),但是当我将它们取出时,它假定它们是本地日期,然后它们都是未来8小时。这是否还没有实施?如果是这样,是否有任何解决方法?谢谢!使用UTC与续集?

回答

3

最简单的尝试将它们放入UTC的方式是覆盖正在使用的数据集类的literal_datetime和/或literal_time,以返回UTC时间的文字字符串。

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

5

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

此信息已从Sequel RDoc

续集拍摄可使用时间或日期时间 从数据库返回的时间。 它默认为时间。将其更改为 日期时间,使用方法:

Sequel.datetime_class = DateTime 

另外,还要确保你不存储在数据库中的时区信息。 我使用Postgres,列类型为时间戳,没有时区

这应该导致显示的日期/时间以UTC表示。在日期/时间传递的2009-07-13T03时,它已经为我工作:22:53Z结果显示为2009-07-13T03:22:53 + 00:00

18

这是有点过时了,但我相信这里的最佳解决方案已经改变,因为原来的答案已发布。如果你设置了

Sequel.default_timezone = :utc 

续集将把所有的时间视为UTC并且不会显示问题中描述的行为。

查找更多的信息在http://sequel.jeremyevans.net/rdoc/classes/Sequel/Timezones.html