Helenr
%z在Python3.2+中支持:>>> from datetime import datetime>>> datetime.strptime('2009/05/13 19:19:30 -0400', '%Y/%m/%d %H:%M:%S %z')
datetime.datetime(2009, 5, 13, 19, 19, 30,
tzinfo=datetime.timezone(datetime.timedelta(-1, 72000)))关于早期版本:from datetime import datetime
date_str = '2009/05/13 19:19:30 -0400'naive_date_str, _, offset_str = date_str.rpartition(' ')
naive_dt = datetime.strptime(naive_date_str, '%Y/%m/%d %H:%M:%S')offset = int(offset_str[-4:-2])*60 +
int(offset_str[-2:])if offset_str[0] == "-":
offset = -offset
dt = naive_dt.replace(tzinfo=FixedOffset(offset))print(repr(dt))# -> datetime.datetime(2009, 5, 13, 19, 19, 30,
tzinfo=FixedOffset(-240))print(dt)# -> 2009-05-13 19:19:30-04:00哪里FixedOffset是基于文档中的代码示例:from datetime import timedelta, tzinfoclass FixedOffset(tzinfo):
"""Fixed offset in minutes: `time = utc_time + utc_offset`."""
def __init__(self, offset):
self.__offset = timedelta(minutes=offset)
hours, minutes = divmod(offset, 60)
#NOTE: the last part is to remind about deprecated POSIX GMT+h timezones
# that have the opposite sign in the name;
# the corresponding numeric value is not used e.g., no minutes
self.__name = '<%+03d%02d>%+d' % (hours, minutes, -hours)
def utcoffset(self, dt=None):
return self.__offset def tzname(self, dt=None):
return self.__name def dst(self, dt=None):
return timedelta(0)
def __repr__(self):
return 'FixedOffset(%d)' % (self.utcoffset().total_seconds() / 60)