默認datetime
模塊確實不是處理時區非常好;超出您當前的機器時區和UTC,它們基本上不受支持。
你必須使用一個外部庫爲或處理時區偏移手動。
外部庫選項:
使用dateutil.parser
可以處理只是你不在乎它扔任何日期或時間格式:
from dateutil import parser
dt = parser.parse(s)
的iso8601
library只處理ISO 8601種格式,這包括相同的形式的時區偏移:
import iso8601
datetimetext, tz = s.rsplit(None, 1) # only grab the timezone portion.
timezone = iso8601.iso8601.parse_timezone('{}:{}'.format(tz[:3], tz[3:]))
dt = datetime.strptime(datetimetext, '%a %b %d %H:%M:%S %Y').replace(tzinfo=timezone)
示範每種方法的:
>>> import datetime
>>> s = 'Fri Aug 17 12:34:00 2012 +0000'
>>> import iso8601
>>> timezone = iso8601.iso8601.parse_timezone('{}:{}'.format(tz[:3], tz[3:]))
>>> datetime.datetime.strptime(datetimetext, '%a %b %d %H:%M:%S %Y').replace(tzinfo=timezone)
datetime.datetime(2012, 8, 17, 12, 34, tzinfo=<FixedOffset '+00:00'>)
>>> from dateutil import parser
>>> parser.parse(s)
datetime.datetime(2012, 8, 17, 12, 34, tzinfo=tzutc())
感謝分享,這是我需要的。 – Blaise 2013-02-19 14:02:22