Các lựa chọn tốt nhất là sử dụng dateutil.parser.parse()
mang đến cho bạn một datetime
đối tượng có thông tin múi giờ thích hợp:
>>> import dateutil.parser
>>> dt = dateutil.parser.parse('Mon Jul 09 09:20:28 +0200 2012')
>>> dt
datetime.datetime(2012, 7, 9, 9, 20, 28, tzinfo=tzoffset(None, 7200))
Bây giờ bạn chỉ cần chuyển nó sang một dấu thời gian UNIX:
>>> import time
>>> int(time.mktime(dt.timetuple()))
1341822028
Các định dạng mà bạn có cũng có thể được dễ dàng phân tách bằng email.utils.parsedate_tz
:
>>> import datetime
>>> import email.utils
>>> parts = email.utils.parsedate_tz('Mon Jul 09 09:20:28 +0200 2012')
>>> dt = datetime.datetime(*parts[:6]) - datetime.timedelta(seconds=parts[-1])
>>> str(dt)
'2012-07-09 07:20:28'
Đây là thực sự làm thế nào email.utils.parsedate_to_datetime
trong Python 3.3 được thực hiện (nếu bạn muốn sao chép & dán này vào dự án của bạn, lại đặt __parsedate_tz
với parsedate_tz
từ email.utils
):
def parsedate_to_datetime(data):
if not data:
return None
*dtuple, tz = __parsedate_tz(data)
if tz is None:
return datetime.datetime(*dtuple[:6])
return datetime.datetime(*dtuple[:6],
tzinfo=datetime.timezone(datetime.timedelta(seconds=tz)))
Bạn cần phải phân tích cú pháp: http://docs.python.org/library/datetime.html#strftime-strptime-behavior – Blender
xem http://devpython.com/2011/08/11/convert này -utc-date-string-to-unix-timestamp/ –
@Blender: Định dạng của OP có vẻ phức tạp. Đối với '+ 0000', anh ta cần'% z' nhưng kết quả trong 'ValueError: 'z' là một chỉ thị không đúng định dạng '% a% b% d% H:% M:% S% z% Y'' – ThiefMaster