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



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

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

怎么了?

email.utils.parsedate返回一个类似于结构struct_time的9元组,但索引6,7和8不可用

struct_time:

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

datetime对象的构造函数需要不同的值

datetime.datetime(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]])

您可以使用元组中有用的部分作为直接创建datetime

date_object = datetime(*d[0:6])


编辑:请小心,因为这将在本地时间创建对象,而不考虑时区信息。


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

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

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

相关内容

  • 没有找到相关文章

最新更新