我正在处理具有两位数年份的旧文本文件,其中默认世纪逻辑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
但我想继续使用这个模块,因为它的模糊匹配似乎运行良好。
The 文档 http://dateutil.readthedocs.io/en/stable/examples.html没有识别执行此操作的参数...是否有一个我忽略的参数?
这没有特别详细的记录,但您实际上可以使用以下命令覆盖它dateutil.parser
。第二个参数是parserinfo
对象,您将关心的方法是convertyear
. The 默认实现 http://dateutil.readthedocs.io/en/stable/_modules/dateutil/parser.html#parserinfo.convertyear是什么给你带来了问题。您可以看到,它对世纪的解释是基于当前年份加上或减去五十年。这就是为什么你会在 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)