当前导零是可选的时,如何使用strptime解析非零填充日期时间字符串?谢谢

How to parse non-zero paded datetime string with strptime when leading zero is optional? Thanks

提问人:Frank Li 提问时间:3/15/2023 最后编辑:Frank Li 更新时间:3/15/2023 访问量:80

问:

我一直在尝试使用 datetime.datetime.strptime() 解析文件名中的日期时间字符串。

import datetime
datetime.datetime.strptime('2023110912', "%Y%m%d%H%M")
datetime.datetime.strptime('202311912', "%Y%m%d%I%M")
datetime.datetime.strptime('202311912', "%Y%m%d%H%M")

我试过在网上搜索答案。 根据这个python文档链接:https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior

在第 9 号注释中,它说:

与 strptime() 方法一起使用时,前导零对于格式 %d、%m、%H、%I、%M、%S、%j、%U、%W 和 %V 是可选的。

我期待得到结果:
datetime.datetime(2023, 1, 1, 9, 12)

但是,相反,我得到了:
datetime.datetime(2023, 11, 9, 1, 2)

如果'%m, %H, %I, %M, %S'是前导零可选,如何区分以上两个日期时间?

我的 python 版本:3.10.7(tags/v3.10.7:6cc6b13,2022 年 9 月 5 日,14:08:36)[MSC v.1933 64 位 (AMD64)]

我是否遗漏了文档中的某些内容?谁能帮忙?多谢!

python-3.x python-datetime 日期时间解析

评论

3赞 Mark Tolonen 3/15/2023
怎么知道 2023-1-1 9:12 或 2023-11-9 1:02 如果前导零是可选的? 如果它们存在并且适合在范围内,则采用两位数。这是模棱两可的。202311912strptime
2赞 Jules SJ 3/15/2023
我强烈建议您不要以这种不可预测的格式处理任何日期。总会有一种情况,即实际上无法知道他们指的是哪个日期和时间。让我们玩一个游戏,这是什么时候:202311111?如果你在前 3 个猜测中猜对了,我会为你写剩下的项目。
2赞 relent95 3/15/2023
您已经知道 Python(没有人)无法区分这两种情况。短语“前导零是可选的”隐含地假定它只有在可以明确解析时才这样做,例如在 的情况下。strptime('2023 3 15', '%Y %m %d')
0赞 Panagiotis Kanavos 3/15/2023
这是数据生产者中 100% 的错误。告诉他们修复它,并在有众所周知的标准和约定时停止使用他们自己的自定义格式。即使是人类也无法分辨是 1 月 11 日还是 11 月 1 日。Python怎么会猜到?2023111
0赞 Panagiotis Kanavos 3/15/2023
使用标准或通用约定YYYY-MM-DDYYYYMMDD

答: 暂无答案