我不想在我当地的时区存储时间,但 Sequel 对我来说真的很难。我可以在将它们放在那里之前将它们设置为 UTC(有点痛苦),但是当我将它们取出时,它假定它们是本地日期,然后它们都是未来 8 小时。这是尚未实施的事情吗?如果是这样,是否有任何解决方法?谢谢!
3 回答
这在这一点上有点过时,但我相信自从发布原始答案以来,这里的最佳解决方案已经改变。如果你设置
Sequel.default_timezone = :utc
sequel 将所有时间视为 UTC,并且不会表现出问题中描述的行为。
Find more info at http://sequel.jeremyevans.net/rdoc/classes/Sequel/Timezones.html
我自己也有一个非常相似的问题。
此信息取自Sequel RDoc
Sequel 可以使用 Time 或 DateTime 作为从数据库返回的时间。它默认为时间。要将其更改为 DateTime,请使用:
Sequel.datetime_class = DateTime
还要确保您没有将时区信息存储在数据库中。我正在使用 Postgres,列类型是timestamp without time zone。
这应该导致显示的日期/时间为 UTC。它在传递2009-07-13T03:22:53Z的日期/时间时对我有用,结果显示为2009-07-13T03:22:53+00:00
尝试将它们作为 UTC 放入的最简单方法是覆盖您正在使用的数据集类的 literal_datetime 和/或 literal_time 以返回 UTC 时间的文字字符串。
在 UTC 中获取它们取决于您使用的适配器。例如,postgres 适配器调用 Sequel.string_to_datetime,它只调用 Sequel.datetime_class 上的 parse(默认为时间)。如果 datetime 列包含时区信息,则一切正常。如果它不包含时区信息,Time.parse 将假定它是本地时间。在这种情况下,您可能需要覆盖 Sequel.string_to_datetime 以确保它始终返回带有 UTC 偏移量的时间(可能通过调用 Time.parse(s).gmtime)。