2009-10-14 13 views

Antwort

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) 

in python3 parsedate_tz hat


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

Ich dachte, RF822 wurde veraltet? – Udbhav

+0

Danke, repariert es. Es gibt keine Verwarnungswarnung sogar in 2.6 :( –

+13

Die obige Technik gibt 'datetime' nicht zurück, sondern ein' tuple'. Der vollständige Code ist 'datetime.datetime.fromtimestamp (email.utils.mktime_tz (email.utils.parsedate_tz ((http://parand.com/say/index.php/2008/02/11/parsing-and-normalizing-dates-with-timezones-in-python/ – AppleGrew

-1

Wenn Sie das abstreifen email.utils bewegt Zeitzone, können Sie es wie folgt tun:

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

Dies funktioniert nicht bei den meisten Gebietsschema-Einstellungen. –

+1

Dies scheint keine Zeitzonen zu haben –

+0

Er fragte spezifisch, wie man es für rfc822 Datum/Zeit macht. Da rfc822 die Zeitzone enthält, lösen Sie die Antwort nicht. Schlimmer noch, es gibt tatsächlich eine andere Zeit zurück, abhängig von der Zeitzone, in der der Code ausgeführt wurde, und der Zeitzone, in der die Zeichenfolge generiert wurde (was in Webanwendungen sehr unterschiedlich sein kann). –

1

Ab python 3.3 gibt es 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)))