代码之家  ›  专栏  ›  技术社区  ›  Phil Kulak

在续集中使用UTC?

  •  6
  • Phil Kulak  · 技术社区  · 15 年前

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

    3 回复  |  直到 10 年前
        1
  •  3
  •   Jeremy Evans    15 年前

    尝试将它们作为UTC放入的最简单的方法是为您用于返回UTC时间的文本字符串的DataSet类重写literal_datetime和/或literal_time。

    在UTC中获取它们取决于您使用的适配器。例如,postgres适配器调用sequel.string_to_datetime,后者只调用sequel.datetime_类的parse(默认情况下为time)。如果datetime列包含时区信息,那么应该可以正常工作。如果它不包含时区信息,time.parse将假定它是给定的本地时间。在这种情况下,您可能希望重写sequel.string_to_datetime,以确保它始终返回带有UTC偏移量的时间(可能通过调用time.parse(s).gmtime)。

        2
  •  21
  •   pyrmont Michael Wasser    10 年前

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

    Sequel.default_timezone = :utc
    

    Sequel会一直将其视为UTC,不会表现出问题中描述的行为。

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

        3
  •  5
  •   Luke Antins    15 年前

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

    此信息来自 Sequel RDoc

    sequel可以使用time或datetime 从数据库返回的时间。 它默认为时间。把它改成 日期时间,使用:

    Sequel.datetime_class = DateTime
    

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

    这将导致显示的日期/时间为UTC。当我通过一个日期/时间 2009年7月13日t03:22:53z 结果显示为 2009年7月13日t03:22:53+00:00