我有一个时间戳,看起来像这个2015-11-06T14:20:14.011+01:00
。我想把它解析为datetime。我有一个想法,我可以使用%Y-%m-%dT%H:%M:%S.%f%z
来表示这一点。
但问题是时区中的冒号。我如何删除时区中的冒号,或者有更好的方法作为%z
吗?
您有一个ISO 8601日期时间字符串。不要费力地解析它或用手摆弄它(参见:XY问题)。将iso8601库用于Python。
import iso8601
parsed = iso8601.parse_date("2015-11-06T14:20:14.011+01:00")
如果要从中删除时区信息,请使用replace
方法。
tz_stripped = parsed.replace(tzinfo=None)
import re
original = '2015-11-06T14:20:14.011+01:00'
replaced = re.sub(r'([+-]d+):(d+)$', r'12', original)
# replaced == '2015-11-06T14:20:14.011+0100'
只有当冒号前面有加号或减号,并且被数字包围直到字符串结束时,才会替换冒号。
我认为最好的方法是使用dateutilshttps://labix.org/python-dateutil
from dateutil.parser import parse
original = '2015-11-06T14:20:14.011+01:00'
print "Original Date {}".format(original)
new_date = parse(original)
print new_date
print type(new_date)
# print new_date.hour
# print new_date.minute
# print new_date.second
print "New Date 1 {}".format(new_date.strftime('%Y-%m-%d %H:%M:%S'))
print "New Date 2 {}".format(new_date.strftime('%Y-%m-%dT%H:%M:%S.%f%z'))
输出:
Original Date 2015-11-06T14:20:14.011+01:00
2015-11-06 14:20:14.011000+01:00
<type 'datetime.datetime'>
New Date 1 2015-11-06 14:20:14
New Date 2 2015-11-06T14:20:14.011000+0100
问候