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