我正在研究具有两位数年份的旧文本文件,其中dateutil.parser中的默认世纪逻辑似乎不能很好地工作.例如,对珍珠港的攻击不在dparser.parse(“12/7/41”)(返回2041-12-7).
回归到1900年的世纪“门槛”似乎发生在66:
import dateutil.parser as dparser
print(dparser.parse("12/31/65")) # goes forward to 2065-12-31 00:00:00
print(dparser.parse("1/1/66")) # goes back to 1966-01-01 00:00:00
为了我的目的,我想将此“阈值”设置为17,以便:
>“12/31/16”解析到2016-12-31(yyyy-mm-dd)
>“1/1/17”解析为1917-01-01
但我想继续使用这个模块,因为它的模糊匹配似乎运作良好.
documentation没有确定这样做的参数……我有一个我忽视的论点吗?
最佳答案:
这没有特别好记录,但您实际上可以使用dateutil.parser覆盖它.第二个参数是一个parserinfo对象,您将关注的方法是convertyear. default implementation是导致你出现问题的原因.你可以看到它是基于当前年份,即上下五十年的世纪解释.这就是你在1966年看到过渡的原因.明年它将是1967年.:)
由于您个人使用它并且可能有非常特殊的需求,因此您不必非常通用.如果它适合你,你可以做一些简单的事情:
from dateutil.parser import parse, parserinfo
class MyParserInfo(parserinfo):
def convertyear(self, year, *args, **kwargs):
if year < 100:
year += 1900
return year
parse('1/21/47', MyParserInfo())
# datetime.datetime(1947, 1, 21, 0, 0)
标签:python,python-dateutil 来源: https://codeday.me/bug/20190516/1115181.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。