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月”应该符合条件。这似乎是最合理的做法,我会这样做。尽管我希望其他人遇到这个问题,并在库代码之外找到解决方案。