我有以不同格式表示日期时间的字符串列表。IE:
list_date_str = ['2021010112', '202101011210']
第一个应转换为 2021-01-01 12:00,第二个应转换为 2021-01-01 12:10。没有多想,我写了这个片段:
import datetime as dt
for date_str in list_date_str:
try:
date = dt.datetime.strptime(date_str, '%Y%m%d%H%M')
except ValueError:
date = dt.datetime.strptime(date_str, '%Y%m%d%H')
print(date)
经过艰苦的错误搜索,我意识到第一个字符串没有按预期解析。代码给出:
2021-01-01 01:02:00
2021-01-01 12:10:00
我明白发生了什么:永远不会到达异常块。相反,“2021010112”的倒数第二个字符被解释为小时数字,最后一个字符被解释为分钟数字。
这是应该的行为吗?日期时间文档清楚地指出 %H 表示一个零填充的十进制数以及 %M。
我没有得到它还是文档只是误导?为什么 try-block 不会引发 ValueError?
有没有一种方便而可靠的方法来解决这个问题?我知道在这种特殊情况下,可以通过交换 try- 和 expect-block 来修复代码。但这不可能是正确的方法。
PS:这个问题也适用于 pd.to_datetime。