使用UTC与续集?

Phi*_*lak 6 ruby sequel

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

Mic*_*ser 21

这点有点过时,但我相信自最初的答案发布以来,这里的最佳解决方案已经改变.如果你设置

Sequel.default_timezone = :utc
Run Code Online (Sandbox Code Playgroud)

续集将所有时间都视为UTC,并且不会展示问题中描述的行为.

有关更多信息,请访问http://sequel.jeremyevans.net/rdoc/classes/Sequel/Timezones.html


Luk*_*ins 5

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

此信息取自Sequel RDoc

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

Sequel.datetime_class = DateTime
Run Code Online (Sandbox Code Playgroud)

还要确保不将时区信息存储在数据库中.我正在使用Postgres,列类型是没有时区的时间戳.

这应该导致显示的日期/时间以UTC为单位.在2009-07-13T03:22:53Z的日期/时间通过时,它对我有用,结果显示为2009-07-13T03:22:53 + 00:00


Jer*_*ans 4

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

以 UTC 格式获取它们取决于您使用的适配器。例如,postgres 适配器调用 Sequel.string_to_datetime,它只调用 Sequel.datetime_class(默认为 Time)上的 parse。如果日期时间列包含时区信息,则一切应该正常。如果它不包含时区信息,Time.parse 将假定给定的是本地时间。在这种情况下,您可能需要重写 Sequel.string_to_datetime 以确保它始终返回具有 UTC 偏移量的时间(也许通过调用 Time.parse(s).gmtime )。