Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ISO to datetime对象:';z';这是一个错误的指令_Python_Datetime_Iso_Rfc3339 - Fatal编程技术网

Python ISO to datetime对象:';z';这是一个错误的指令

Python ISO to datetime对象:';z';这是一个错误的指令,python,datetime,iso,rfc3339,Python,Datetime,Iso,Rfc3339,我正在尝试使用以下代码将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' 将上述格式的ISO字符串转换为datetime对象的

我正在尝试使用以下代码将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'

将上述格式的ISO字符串转换为
datetime
对象的最佳方法是什么?我使用的是Python 2.7.6版。

欢迎使用Python datetime!处理日期和时间必然很复杂,而Python并不完全包括在本例中的电池。您不能在
strtime
中使用
%z
,因为Python没有表示时区的类(您应该实现自己的类,或者更好地包括一些其他库)

您希望使用
pytz
python-dateutil
。有关更多详细信息,请参见此处:

python 2.7的问题 我在解析git log--date=iso8601的输出中的提交日期时遇到了类似的问题,它实际上不是iso8601格式(因此在更高版本中添加了
--date=iso8601 strict

问题是因为严格意义上不是ISO8601(注意在时区信息中有一个

django和pytz的解决方案: 因为我使用的是
django
,所以我可以利用那里的实用程序

您可以使用自己的正则表达式,而不是
strtime

请注意,django确实在引擎盖下使用了
pytz
,用于
utc
singleton

不含django和pytz的解决方案: 如果您想要一个快速而肮脏的解决方案,您可以使用类似于
django
的东西,而无需满足所有要求


请注意:YMMV,没有支持。

相关:我的上帝python就像月亮的相位-本周我们将这样做,下周谁在乎!我不得不说,缺少
%z
确实令人失望……这真是太棒了!不需要第三方软件包或自己的解析器代码!我认为很多人都使用Django。这应该是正确的答案,因为有人使用Django!没有Django,你能解决这个问题吗?如果你的时区没有
-
STT,即使是
parse_datetime
也帮不了你。我找到了一种迂回的纯python方法,我在这里写道:
>>> import datetime, sys
>>> datetime.datetime.strptime("2013-07-23T15:10:59.342107+01:00", "%Y-%m-%dT%H:%M:%S.%f%z")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_strptime.py", line 317, in _strptime
    (bad_directive, format))
ValueError: 'z' is a bad directive in format '%Y-%m-%dT%H:%M:%S.%f%z'
>>> sys.version
'2.7.10 (default, Feb  7 2017, 00:08:15) \n[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)]'
>>> import datetime, sys
>>> datetime.datetime.strptime("2013-07-23T15:10:59.342107+01:00", "%Y-%m-%dT%H:%M:%S.%f%z")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/_strptime.py", line 565, in _strptime_datetime
    tt, fraction = _strptime(data_string, format)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/_strptime.py", line 362, in _strptime
    (data_string, format))
ValueError: time data '2013-07-23T15:10:59.342107+01:00' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'
>>> sys.version
'3.6.3 (v3.6.3:2c5fed86e0, Oct  3 2017, 00:32:08) \n[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]'
>>> datetime.datetime.strptime("2013-07-23T15:10:59.342107+0100", "%Y-%m-%dT%H:%M:%S.%f%z")
datetime.datetime(2013, 7, 23, 15, 10, 59, 342107, tzinfo=datetime.timezone(datetime.timedelta(0, 3600)))
>>> 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)
>>> from datetime_z import parse_datetime
>>> parse_datetime("2013-07-23T15:10:59.342107+01:00")
datetime.datetime(2013, 7, 23, 15, 10, 59, 342107, tzinfo=+0100)