我正在处理具有2位数字年份的旧文本文件,其中dateutil.parser中的默认世纪逻辑似乎无法正常工作。例如,对Pearl Harbor的攻击不是针对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对象,您将要使用的方法是convertyeardefault 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 - 自定义dateutil.parser世纪推理逻辑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38577076/

    10-12 21:25