2009-10-14 129 views

回答

30

In [1]: import rfc822  # This only works for python 2 series 

In [2]: rfc822.parsedate_tz('Sun, 09 Mar 1997 13:45:00 -0500') 
Out[2]: (1997, 3, 9, 13, 45, 0, 0, 1, 0, -18000) 

在python3 parsedate_tz已經轉移到email.utils


>>> import email.utils # this works on Python2.5 and up 
>>> email.utils.parsedate_tz('Sun, 09 Mar 1997 13:45:00 -0500') 
(1997, 3, 9, 13, 45, 0, 0, 1, -1, -18000) 
+0

我以爲rf822已被棄用? – Udbhav 2009-10-14 20:45:13

+0

謝謝,修復它。即使在2.6中也沒有棄用警告:( – 2009-10-14 20:59:51

+13

)上述技術不會返回'datetime',而是'tuple'。完整的代碼是'datetime.datetime.fromtimestamp(email.utils.mktime_tz(email.utils.parsedate_tz( rfcdate)),pytz.utc)'。Ref:http://parand.com/say/index.php/2008/02/11/parsing-and-normalizing-dates-with-timezones-in-python/ – AppleGrew 2012-08-11 14:04:34

-1

如果剝去時區,你可以這樣做:

datetime.datetime.strptime('Sun, 09 Mar 1997 13:45:00', '%a, %d %b %Y %H:%M:%S') 
+0

這對大多數區域設置不起作用。 – 2009-10-15 03:52:21

+1

這似乎沒有時區 – 2013-11-07 12:16:43

+0

他特別提出瞭如何爲rfc822日期/時間做這件事。由於rfc822包含時區,因此您的答案並不能解決問題。更糟糕的是,實際上它返回的時間不同,具體取決於運行代碼的時區以及生成字符串的時區(這在Web應用程序中可能差別很大)。 – 2017-07-17 06:11:27

1

從python 3.3起,有email.utils.parsedate_to_datetime(date)

>>> from email.utils import parsedate_to_datetime 
>>> datestr = 'Sun, 09 Mar 1997 13:45:00 -0500' 
>>> parsedate_to_datetime(datestr) 
datetime.datetime(1997, 3, 9, 13, 45, tzinfo=datetime.timezone(datetime.timedelta(-1, 68400))) 
相關問題