Dateutil的分析器在2月不解析

2024-03-29 14:26:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中遇到了一个非常奇怪的bug。在

from dateutil import parser
string = "March 2008"
parser.parse(string)
 datetime.datetime(2008, 3, 30, 0, 0)
string = "February 2008"
parser.parse(string)

回溯(最近一次呼叫):

File "", line 1, in File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/parser.py", line 697, in parse return DEFAULTPARSER.parse(timestr, **kwargs) File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/dateutil/parser.py", line 310, in parse ret = default.replace(**repl) ValueError: day is out of range for month

我知道我可以在字符串中添加一天以使解析器正常工作,但是我不知道为什么dateutil在2月份没有日期的情况下不能工作,而它每隔一个月就可以工作一次。在


Tags: inparserextrasdatetimestringparselibline
2条回答

问题是,解析字符串中不存在的任何字段都是从当前日期获取的。在

请注意,“2008年3月”返回了2008年3月30日,因为您在2014年7月30日运行了它。在

同样地,“三月”也就是2014年3月30日。在

所以,“2008年2月”会给你2008年2月30日,这当然是无效的。在

这是一个有趣的。在

从dateutil.parser公司名称:

    def parse(self, timestr, default=None,
                ignoretz=False, tzinfos=None,
                **kwargs):
    if not default:
        default = datetime.datetime.now().replace(hour=0, minute=0,
                                                  second=0, microsecond=0)

基本上,如果不提供日期,任何缺少日期的日期字符串都将默认为当前日期。碰巧是今天的第30天,二月当然没有。这可能被认为是dateutil中的一个bug。在

相关问题 更多 >