【问题标题】:1 hour off when converting RFC 2822 date to datetime将 RFC 2822 日期转换为日期时间时休息 1 小时
【发布时间】:2016-01-30 18:26:40
【问题描述】:

这是我想要做的:

>>> from email.utils import parsedate
>>> tup = parsedate("Fri, 22 Jan 2016 10:15:00 GMT")
>>> tup
(2016, 1, 22, 10, 15, 0, 0, 1, -1)
>>> import datetime
>>> import time
>>> timestamp = time.mktime(tup)
>>> timestamp
1453454100.0
>>> datetime.datetime.utcfromtimestamp(timestamp)
datetime.datetime(2016, 1, 22, 9, 15)

我正在使用 email.utils.parsedate 函数将 RFC 2822 日期解析为 struct_time。这看起来是正确的,小时部分是10。然后,我使用time.mktime 将其转换为时间戳,然后尝试使用datetime.utcfromtimestamp 从中获取UTC 日期时间,但出于某种奇怪的原因,日期时间中的小时为9。我真的不明白为什么。

我在 UTC+1,所以可能在某个地方发生了到当地时间的转换,但我不知道在哪里。

【问题讨论】:

  • 你的时区是什么?
  • 我在 UTC+1。使用 parsedate_tz 也不起作用。它返回时区偏移量作为元组中的一个额外元素,但不影响元组的其余部分。所以可能在某个地方发生了到当地时间的转换,但我不知道在哪里。
  • 也许email.parsedate 函数将GMT 视为时区,并包括夏令时?一般来说,我会避免像您在这里那样混合几个不同的模块(电子邮件、时间和日期时间)。 pytz 是一个非常好的处理时间和时区的包。
  • 问题是 time.mktime 期望时间元组是本地时间。感谢您的所有帮助。

标签: python date datetime utc


【解决方案1】:

问题是mktime 期望元组在本地时间。还有calendar.gmtime,它希望它是UTC。我实际上可能只是按照@Boaz 的建议使用 dateutil

【讨论】:

    【解决方案2】:

    我建议只使用dateutil https://pypi.python.org/pypi/python-dateutil

    它将它直接转换为正确的日期时间对象

    from dateutil import parser
    parser.parse("Fri, 22 Jan 2016 10:15:00 GMT")
    

    【讨论】:

      【解决方案3】:

      来自Time access and conversions

      time.mktime(t):
      这是 localtime() 的反函数。它的参数是 struct_time 或完整的 9 元组(因为需要 dst 标志;如果未知,则使用 -1 作为 dst 标志),它表示本地时间的时间,而不是 UTC。

      为了得到正确的结果,你应该使用calendar.timegm():

      >>> calendar.timegm(tup)
      1453457700
      

      【讨论】:

        【解决方案4】:

        您也可以使用日期时间。

        >>> from datetime import datetime as dt
        >>> d = "Fri, 22 Jan 2016 10:15:00 GMT"
        >>> dt.strptime(d, "%a, %d %b %Y %H:%M:%S %Z")
        datetime.datetime(2016, 1, 22, 10, 15)
        

        【讨论】:

          猜你喜欢
          • 2011-03-28
          • 2010-10-27
          • 1970-01-01
          • 2010-10-01
          • 2015-12-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-15
          相关资源
          最近更新 更多