ISO到datetime对象:'z'是一个糟糕的指令

我正在尝试使用下面的代码将ISO转换为datetime

 dt = datetime.datetime.strptime("2013-07-23T15:10:59.342107+01:00", "%Y-%m-%dT%H:%M:%S.%f%z") 

我得到下面的错误:

 'z' is a bad directive in format '%Y-%m-%dT%H:%M:%S.%f%z' 

将格式以上的ISOstring转换为datetime对象的最佳方法是什么? 我正在使用Python版本2.7.6。

欢迎来到Pythondate时间! 处理date和时间是非常复杂的,Python并没有完全包含这种情况下的电池。 你不能在strptime使用%z ,因为Python没有类来表示时区(你应该实现你自己的,或者更好的还包括一些其他的库)。

你想使用pytzpython-dateutil 。 更多细节请看这里:

Python strptime()和时区?

因为我使用django所以我可以利用这个工具。

https://github.com/django/django/blob/master/django/utils/dateparse.py

 >>> from django.utils.dateparse import parse_datetime >>> parse_datetime('2013-07-23T15:10:59.342107+01:00') datetime.datetime(2013, 7, 23, 15, 10, 59, 342107, tzinfo=+0100) 

你可以使用自己的正则expression式来代替strptime