Python27 - 将元组时间转换为datetime对象

时间:2016-08-08 09:51:30

标签: python datetime

我正试图从这样的电子邮件中获取时间戳:

Received: by 10.64.149.4 with SMTP id tw4csp1211013ieb;
    Thu, 4 Aug 2016 07:02:01 -0700 (PDT)

首先,我用时间戳解析:

d = email.utils.parsedate('Thu, 4 Aug 2016 07:02:01 -0700 (PDT)')

Result: (2016, 8, 4, 7, 2, 1, 0, 1, -1)

这就是问题所在。我尝试将结果转换为日期时间,但是徒劳无功。

d = email.utils.parsedate('Thu, 4 Aug 2016 07:02:01 -0700 (PDT)')

date_object = datetime(d)

Result: Traceback (most recent call last):
  File "data.py", line 12, in <module>
    date_object = datetime(d)
TypeError: an integer is required

有什么问题?

3 个答案:

答案 0 :(得分:2)

Index Attribute Values 0 tm_year (for example, 1993) 1 tm_mon range [1, 12] 2 tm_mday range [1, 31] 3 tm_hour range [0, 23] 4 tm_min range [0, 59] 5 tm_sec range [0, 61]; see (2) in strftime() description 6 tm_wday range [0, 6], Monday is 0 7 tm_yday range [1, 366] 8 tm_isdst 0, 1 or -1 returns a 9 tuple similar to the structure struct_time but with the index 6,7 and 8 unusable

struct_time:

datetime

datetime.datetime(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]])个对象的构造函数需要不同的值

datetime

您可以使用元组的有用部分直接创建date_object = datetime(*d[0:6])

strptime

编辑:小心这一点,因为这会在当地时间创建对象,而忽略时区信息。

编辑2:您可以使用(PDT)解决此问题,您只需要从字符串末尾剪切tzinfo,因为PDT不是-0700的有效名称,但是{{1}}就足够了

答案 1 :(得分:1)

签出calendar.timegmtime.mktime,将struct_time元组转换为float。然后,您可以使用datetime.fromtimestamp与该浮点数来创建DateTime对象。

答案 2 :(得分:1)

元组的最后两项很奇怪,它们看起来不像时区数据。但是,如果您不需要时区识别datetime对象,则可以执行以下操作datetime(*d[:-2])