首页 > 解决方案 > ValueError:时间数据“2020-01-31T15:16:21+00:00”与格式“%Y-%m-%dT%H:%M:%S%z”不匹配

问题描述

我在获取日期时间来解析这个时间数据时确实遇到了一些麻烦。(这适用于windows,但不适用于linux)

谁能告诉我为什么这在 Linux 上不起作用?

d1 = '2020-01-31T15:16:21+00:00'

d1 = datetime.datetime.strptime(d1, "%Y-%m-%dT%H:%M:%S%z")

标签: python

解决方案


它也不应该在 Windows 中工作。如日期时间文档中所述,该%z格式不支持时区的小时和分钟之间的冒号。您需要先删除冒号:

import datetime
import re

d1 = "2020-01-31T15:16:21+00:00"

# Remove all colons in the timezone part
d1 = re.sub(r"([\+-]\d\d):(\d\d)(?::(\d\d(?:.\d+)?))?", r"\1\2\3", d1)

d1 = datetime.datetime.strptime(d1, "%Y-%m-%dT%H:%M:%S%z")  # now works normally

预期%z格式:±HHMM[SS[.ffffff]]

基于上述格式的正则表达式含义说明:https ://regex101.com/r/EoOBHW/1


或者,您可以使用dateutil第三方库,它可以成功解析该字符串:

import datetime

from dateutil.parser import parse

d1 = parse("2020-01-31T15:16:21+00:00")

推荐阅读