【问题标题】:Date parsing is inappropriate in python-dateutil modulepython-dateutil 模块中的日期解析不合适
【发布时间】:2020-05-20 14:16:36
【问题描述】:

目前我正在使用最新的 python-dateutil 模块 v2.8.1,当我运行这样的东西时:

from dateutil import parser
print(parser.parse('May 20,2019').isoformat())

我得到了:2020-05-20T00:00:00

但直到 python-dateutil 模块 v2.4 给出的结果为:2019-05-20T00:00:00

这是该模块的错误还是我做错了什么?

【问题讨论】:

    标签: python python-3.x python-dateutil


    【解决方案1】:

    您没有做错任何事情 - 这似乎是由于添加了对解析 ISO 8601 日期(例如 stdlib logging 时间戳)的支持而导致的回归。

    2020-05-20 12:34:56,789
    

    逗号后面的数字是时间的毫秒部分。添加对逗号毫秒分隔符的支持也导致了原始帖子中出现的错误。

    在 dateutil v2.5.0+ 中:

    >>> from dateutil.parser import parse
    >>> parse("May 20,2019")  # bugged
    datetime.datetime(2020, 5, 20, 0, 0)
    >>> parse("2020-05-20 12:34:56.789")
    datetime.datetime(2020, 5, 20, 12, 34, 56, 789000)
    >>> parse("2020-05-20 12:34:56,789")  # working
    datetime.datetime(2020, 5, 20, 12, 34, 56, 789000)
    

    在 dateutil v2.4.2 中:

    >>> from dateutil.parser import parse
    >>> parse("May 20,2019")  # not bugged
    datetime.datetime(2019, 5, 20, 0, 0)
    >>> parse("2020-05-20 12:34:56.789")
    datetime.datetime(2020, 5, 20, 12, 34, 56, 789000)
    >>> parse("2020-05-20 12:34:56,789")  # not working
    ValueError: Unknown string format
    

    请注意,您的案例中的“2019”年将被忽略。 2020 来自用解析的信息替换当前日期。如果你传入default kwarg,它将替换为那个。

    >>> from datetime import datetime
    >>> parse("May 20,1998")
    datetime.datetime(2020, 5, 20, 0, 0)
    >>> parse("May 20,1998", default=datetime(1998,3,19))
    datetime.datetime(1998, 5, 20, 0, 0)
    

    我在 dateutil 的跟踪器上的任何地方都找不到提到的问题,所以也许你应该报告它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多