我已经一遍又一遍地检查了这一行,但找不到此错误的不匹配之处。也许另一双眼睛可以告诉我?
ValueError:时间数据
'2019-07-17T00:00:00.000000000Z' does not match format '%Y-%m-%dT%H:%M:%S.%fZ'
不匹配在哪里?
**更新*****
2019-07-17T00:00:00.000000000Z
是JSON流的一部分:
{
"volume": 82,
"mid": {
"h": "1.12286",
"c": "1.12272",
"l": "1.12267",
"o": "1.12274"
},
"complete": true,
"time": "2019-07-17T23:00:00.000000000Z"
},
{
"volume": 10,
"mid": {
"h": "1.12284",
"c": "1.12272",
"l": "1.12272",
"o": "1.12274"
},
"complete": false,
"time": "2019-07-18T00:00:00.000000000Z"
}
这与收到的信息完全相同,我正在将time
值发送到此函数中:
time.mktime(time.strptime(str(json['time']), '%Y-%m-%dT%H:%M:%S.%fZ')))
答案 0 :(得分:1)
documentation上有一个关于%f
的注释(公平的脚注):
与strptime()方法一起使用时,%f伪指令接受右边的1到6位数字和零填充。 %f是对C标准格式字符集的扩展(但在日期时间对象中单独实现,因此始终可用)。
如果您从微秒中删除了一些零,则格式字符串可以正常工作:
datetime.strptime('2019-07-17T00:00:00.000000Z', '%Y-%m-%dT%H:%M:%S.%fZ')
# datetime.datetime(2019, 7, 17, 0, 0)
答案 1 :(得分:1)
仅通过调整日期和格式就可以自己发现问题:
失败:
d = datetime.strptime("2019-07-17T00:00:00.000000000Z", "%Y-%m-%dT%H:%M:%S.%fZ")
成功:
d = datetime.strptime("2019-07-17T00:00:00", "%Y-%m-%dT%H:%M:%S")
这意味着问题来自%fZ
部分。
在Python文档中,%f
表示微秒,表示6位数字。
d = datetime.strptime("2019-07-17T00:00:00.000000Z", "%Y-%m-%dT%H:%M:%S.%fZ")
以上就是可行的
编辑:您可以有两种选择:
如果传入字符串的纳秒部分始终以3个零结尾,则可以将格式调整为"%Y-%m-%dT%H:%M:%S.%f000Z"
如果不确定,则可以将输入字符串中的最后3位数字修剪掉
一种方法:
input_string = "2019-07-17T00:00:00.000000000Z"
result = datetime.strptime(input_string[:-4], "%Y-%m-%dT%H:%M:%S.%f")
在这里,我从字符串中排除了最后4个字符(000Z
),并相应地更新了格式以删除最后Z
个匹配项。