【发布时间】:2021-04-16 08:42:43
【问题描述】:
我有以不同格式表示日期时间的字符串列表。即:
list_date_str = ['2021010112', '202101011210']
第一个应转换为 2021-01-01 12:00,第二个应转换为 2021-01-01 12:10。 我没有多想就写了这个sn-p:
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”的倒数第二个字符被解释为小时数字,最后一个字符被解释为分钟数字。
这是应该的行为吗? datetime doc 明确指出 %H 表示 零填充 十进制数以及 %M。
我没有得到它还是文档只是误导?为什么 try-block 不会引发 ValueError?
有没有一种方便而可靠的方法来解决这个问题?我知道在这种特殊情况下,可以通过交换 try- 和 expect-block 来修复代码。但这不是正确的做法。
PS:这个问题也适用于 pd.to_datetime。
【问题讨论】:
-
数字是零填充的不是要求 - 我认为这在文档中有点不清楚。
标签: python-3.x datetime format strptime zero-padding