python - dateutil 和闰年
问题描述
如果我有以下字符串列表:
a = ['Loc_RaffertytoLong_2004_02_21',
'Loc_RaffertytoLong_2004_02_22',
'Loc_RaffertytoLong_2004_02_23',
'Loc_RaffertytoLong_2004_02_24',
'Loc_RaffertytoLong_2004_02_26',
'Loc_RaffertytoLong_2004_02_27',
'Loc_RaffertytoLong_2004_02_28',
'Loc_RaffertytoLong_2004_02_29']
我尝试使用以下方法解析日期dateutil
:
from dateutil import parse as dparse
for i in a:
print(dparse.parse(i,fuzzy=True))
我得到打印输出:
2019-02-21 00:00:00
2019-02-22 00:00:00
2019-02-23 00:00:00
2019-02-24 00:00:00
2019-02-26 00:00:00
2019-02-27 00:00:00
2019-02-28 00:00:00
和错误:
ValueError: ('Unknown string format:', 'Loc_RaffertytoLong_2004_02_29')
我不知道为什么自 2004 年以来是闰年。
解决方案
如果您查看输出,则将您dateutil
的日期解释为 2019 年(不是闰年)的日期。
通过更改行,我能够使您的代码成功:
print(dparse.parse(i,fuzzy=True))
至:
print(dparse.parse('-'.join(i.split('_')[2:])))
当我运行整个块时,我得到输出:
2004-02-21 00:00:00
2004-02-22 00:00:00
2004-02-23 00:00:00
2004-02-24 00:00:00
2004-02-26 00:00:00
2004-02-27 00:00:00
2004-02-28 00:00:00
2004-02-29 00:00:00
有趣的是,如果我们像这样加入下划线:
print(dparse.parse('_'.join(i.split('_')[2:])))
它还将日期解释为 2019 年。这让我认为问题在于如何dateutil
处理下划线。
您也可以简单地将下划线替换为破折号:
from dateutil import parser
for i in a:
print(parser.parse(i.replace('_','-'), fuzzy=True))
打印与上面相同的输出。
推荐阅读
- ios - 如何在 Codemagic 中指定目标平台 ios 版本号
- python - Python 3-ValueError:没有足够的值来解包(预期 3,得到 2)
- python - Python从字符串中删除特殊字符不起作用
- javascript - Discord.js:在发送之前隐藏命令输入或修改它(在测验机器人上工作)
- docker - Docker:如何使用 docker 容器访问主机网络?
- flutter - 如何实现网络数据获取,然后在带有 setState 的 showDialog 内的警报中的复选框中显示
- python - 如何使用带右括号的拆分字符串作为分隔符
- python - 错误:字符串格式化期间并非所有参数都转换了
- java - Android:自定义 ListView 不会立即填充
- ignite - Apache ignite 连接到不同的服务器