2016-08-08 37 views
0

我想從這樣的郵件得到時間戳:Python27 - 轉換元組的時間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 

什麼問題?

+0

閱讀關於'datetime.strptime':https://docs.python.org/3.4/library/datetime.html#datetime.datetime.strptime和https://docs.python.org/3.4/library/datetime.html#strftime -strptime-behavior – DeepSpace

+0

@DeepSpaceI我不能使用strptime,因爲格式%Z是一個不好的指令 – echo

+0

這意味着什麼? – DeepSpace

回答

2

email.utils.parsedate東西returns a 9 tuple similar to the structure struct_time but with the index 6,7 and 8 unusable

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足夠

1

元組的最後兩項很奇怪,它們看起來不像時區數據。但是,如果你不需要時區意識到datetime對象,你可以這樣做datetime(*d[:-2])