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