如果我有以下字符串列表:

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年以来是a年。

最佳答案

如果查看输出,dateutil会将日期解释为2019年的日期(这不是a年)。

我可以通过更改以下行来使您的代码成功:

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))


打印与上述相同的输出。

关于python - dateutil和leap年,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57731429/

10-13 00:29