我正试图从这样的电子邮件中获取时间戳:
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.timegm
或time.mktime
,以将struct_time元组转换为浮点值。然后,您可以将datetime.fromtimestamp
与该float一起使用来创建DateTime对象。
元组的最后两项很奇怪,它们看起来不像时区数据。但是,如果您不需要具有时区意识的datetime
对象,您可以执行类似datetime(*d[:-2])
的操作