【发布时间】:2009-07-11 21:49:05
【问题描述】:
我不想在本地时区存储时间,但 Sequel 让我很难做到。我可以在将它们放在那里之前将它们设置为 UTC(有点痛苦),但是当我将它们取出时,它假定它们是本地日期,然后它们都是未来 8 小时。这是尚未实施的事情吗?如果是这样,是否有任何解决方法?谢谢!
【问题讨论】:
我不想在本地时区存储时间,但 Sequel 让我很难做到。我可以在将它们放在那里之前将它们设置为 UTC(有点痛苦),但是当我将它们取出时,它假定它们是本地日期,然后它们都是未来 8 小时。这是尚未实施的事情吗?如果是这样,是否有任何解决方法?谢谢!
【问题讨论】:
此时这有点过时了,但我相信自发布原始答案以来,这里的最佳解决方案已经改变。如果你设置
Sequel.default_timezone = :utc
sequel 将所有时间视为 UTC,并且不会表现出问题中描述的行为。
在http://sequel.jeremyevans.net/rdoc/classes/Sequel/Timezones.html了解更多信息
【讨论】:
我自己也遇到了非常相似的问题。
此信息取自Sequel RDoc
Sequel 可以使用 Time 或 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)。
【讨论】: