我有字符串日期时间(例如:“2022-11-11T06:19:32.776289776Z”)。我想转换成ISO格式。
我试着在下面
>>> datetime.datetime.fromisoformat("2022-11-11T06:19:32.776289776Z")
但它是抛出错误。ValueError: Invalid isoformat string: '2022-11-11T06:19:32.776289776Z
如果我在最后一个没有Z的地方只给予6位数,它就有效。
下面的例子对我来说是有效的,但是不适用于9位数和z的字符串:
>>> datetime.datetime.fromisoformat("2022-11-11T06:19:32.776289")
datetime.datetime(2022, 11, 11, 6, 19, 32, 776289)
2条答案
按热度按时间hmmo2u0o1#
如果Python 3.11可用
如果你可以升级到Python 3.11,那么
fromisoformat
可以处理这个问题:给予
Python早期版本
如果您仅限于早期版本的Python,那么正如@SalmanA在评论中所说的那样,您可以通过以下方式获得有效的时间戳:(1)使用
re.sub
将微秒缩短到6位数,以及(2)将Z
替换为+00:00
(str.replace
将完成此操作)。这假设时间戳以其他方式被有效地格式化(例如,字符串中的任何其他地方都没有字母
Z
)。例如:
给出:
注意,如⑴和⑶所示,微秒被截断,而不是舍入,即
32.776289776
会转到32.776289
,而不是32.776290
。(原生Python 3.11解决方案也是如此。)如果你想要真正的舍入,那么你需要进一步解析字符串。k5ifujac2#
您可以在
dateutil
中使用更“宽松”的解析器。实际上,您安装了python-dateutil
[PyPi]包。这将用任意数量的数字进行解析,* 但是 *...datetime
的 * 分辨率 * 为微秒,这意味着它不会存储 * 六位数字之后的详细信息,因此它会忽略其余的数字:因此省略了
…776
部分。