【问题标题】:Using UTC with Sequel?将 UTC 与 Sequel 一起使用?
【发布时间】:2009-07-11 21:49:05
【问题描述】:

我不想在本地时区存储时间,但 Sequel 让我很难做到。我可以在将它们放在那里之前将它们设置为 UTC(有点痛苦),但是当我将它们取出时,它假定它们是本地日期,然后它们都是未来 8 小时。这是尚未实施的事情吗?如果是这样,是否有任何解决方法?谢谢!

【问题讨论】:

    标签: ruby sequel


    【解决方案1】:

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

    Sequel.default_timezone = :utc
    

    sequel 将所有时间视为 UTC,并且不会表现出问题中描述的行为。

    http://sequel.jeremyevans.net/rdoc/classes/Sequel/Timezones.html了解更多信息

    【讨论】:

      【解决方案2】:

      我自己也遇到了非常相似的问题。

      此信息取自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

      【讨论】:

        【解决方案3】:

        尝试将它们输入为 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)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-11-18
          • 2019-04-22
          • 2018-08-06
          • 2013-05-15
          • 2019-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多