2009-10-14 8 views

Trả lời

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) 

trong python3 parsedate_tz đã chuyển sang 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

Tôi nghĩ rằng rf822 không được dùng nữa? – Udbhav

+0

Cảm ơn, đã sửa nó. Không có cảnh báo không dùng nữa ngay cả trong 2.6: ( –

+13

Kỹ thuật trên không trả về 'datetime', thay vì' tuple'. Mã hoàn chỉnh là '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

-1

Nếu bạn Tước múi giờ, bạn có thể làm như sau:

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

Điều này sẽ không hoạt động đối với hầu hết các thiết lập miền địa phương. –

+1

Điều này dường như không có múi giờ –

+0

Ông đặc biệt hỏi làm thế nào để làm điều đó cho ngày/giờ rfc822. Vì rfc822 bao gồm múi giờ, bạn trả lời không giải quyết được. Thậm chí tệ hơn, nó thực sự trả về một thời gian khác, tùy thuộc vào múi giờ mã được chạy, và múi giờ mà chuỗi được tạo ra (trong đó các ứng dụng web có thể thay đổi rất nhiều). –

1

Số python 3.3 có 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)))