Python 如何使用dateparser分析1000年之前的日期?

Python 如何使用dateparser分析1000年之前的日期?,python,datetime,Python,Datetime,我正在尝试使用dateparser解析1000年前的日期,少于四位数 import dateparser value = "july 900" result = dateparser.parse(value) result is None # True 起初,我认为这与这里提到的问题有关:,因为有些时候有特定的输入(比如900),结果是当前日期和月份与年份1900。 但是在对随机日期和相关表达式进行了更多的尝试之后,我注意到dateparser可以输出比1000更早的日期,然后我发现如果我

我正在尝试使用
dateparser
解析1000年前的日期,少于四位数

import dateparser

value = "july 900"
result = dateparser.parse(value)
result is None  # True
起初,我认为这与这里提到的问题有关:,因为有些时候有特定的输入(比如
900
),结果是当前日期和月份与年份
1900
。 但是在对随机日期和相关表达式进行了更多的尝试之后,我注意到
dateparser
可以输出比
1000
更早的日期,然后我发现如果我将年份归零,结果将是正确的

import dateparser

value = "july 0900"
result = dateparser.parse(value)
result is None  # False
result  # datetime.datetime(900, 7, 4, 0, 0)
我在寻找解决方案时发现: 但是最后的评论留给我的问题多于答案,因为我没有找到一种方法将自定义解析器传递给
dateparser
dateutil.parser
的内部用户

我目前的解决方案是寻找正则表达式3位数的年份模式,使用类似的方法:
(.*+.*.+[\/\-.]{1,})([1-9][0-9]{2,})(*.+.*.*.*.[\/\-.]{1,}.+)
,并将它们填充到位

有更好的方法吗

编辑:

是否也有一个优雅的解决方案来解析我们时代之前的日期(例如BC)?(在这方面,
dateparser
settings键
SUPPORT\u BEFORE\u COMMON\u ERA
似乎没有多大作用,而所有其他键似乎都不相关)


因此,这可以用于考古约会网站。

不要将正则表达式用于日期。这很难,角落里的箱子会让你发疯的。模块
dateutil
正确执行您想要的操作

>>> from dateutil import parser
>>> value = "july 900"
>>> parser.parse(value)
datetime.datetime(900, 7, 4, 0, 0)

这不是当前时代之前日期的解决方案。这是因为
dateutil
dateparser
都使用
datetime
s,并且
datetime
s不接受小于1的年份。

不使用带日期的正则表达式。这很难,角落里的箱子会让你发疯的。模块
dateutil
正确执行您想要的操作

>>> from dateutil import parser
>>> value = "july 900"
>>> parser.parse(value)
datetime.datetime(900, 7, 4, 0, 0)

这不是当前时代之前日期的解决方案。这是因为
dateutil
dateparser
都使用
datetime
s,并且
datetime
s不接受小于1年的年份。

是的,这将解决部分问题,但我确实需要使用
dateparser
库,这似乎没有为我提供插手此事的钩子。在这种情况下,你最好将此问题作为bug报告给
dateparser
维护人员。该模块声称可以解析“网页上常见的几乎任何字符串格式的本地化日期”,我认为“900年7月”应该符合条件。这似乎是最合理的做法,我会这样做。虽然我希望其他人遇到这个问题,并在库的代码之外找到解决方案。是的,这将解决部分问题,但我确实需要使用
dateparser
库,这似乎没有为我提供插手此事的钩子。在这种情况下,你最好将此问题作为bug报告给
dateparser
维护人员。该模块声称可以解析“网页上常见的几乎任何字符串格式的本地化日期”,我认为“900年7月”应该符合条件。这似乎是最合理的做法,我会这样做。尽管我希望其他人遇到这个问题,并在库代码之外找到解决方案。