给定部分日期时间解析日期时间范围或持续时间

Parse datetime-range or duration given a partial datetime

假设我得到了部分日期时间字符串。我想获得它代表的日期时间,以及给定日期时间的分辨率是多少。

例如:

想法是使用给定的部分日期时间字符串作为时间范围规范。意思是不写"All of March, 2020",只写"2020-03".

这个问题可以通过 pandas 框架简化为一个答案,尽管在上面的例子中给定了一个部分字符串,pd.Timestamp(...) 解析得很好(例如 pd.Timestamp("2020-03") == pd.Timestamp('2020-03-01 00:00:00.000000'))。

提前致谢!

EDIT:看来内部函数pandas._libs.tslibs.parsing.parse_datetime_string_with_resoreturns是我想要的。有谁知道我如何访问它(无法使用 from pandas._libs.tslibs.parsing import parse_datetime_string_with_reso 访问)?

dateutil 有一个很好的解析器,允许输入字符串有缺失的部分:

from dateutil import parser


dates = ["2021-01-06 12", "2020-03", "2020-03-01"]

for date in dates:
    if len(date.split('-')) <= 2:
        # If day is missing, resulting day will be the same as
        # the current day of month instead of '01'.
        date += '-01'
    parsed = parser.parse(date)
    print(parsed)

输出:

2021-01-06 12:00:00
2020-03-01 00:00:00
2020-03-01 00:00:00

你可以试试这个https://pypi.org/project/datefinder/ 用于在字符串中定位日期的 python 模块。

具体解决问题的这一部分:

EDIT: It seems that the internal function pandas._libs.tslibs.parsing.parse_datetime_string_with_reso returns what I want. Does anyone know how can I access it (not accessible using from pandas._libs.tslibs.parsing import parse_datetime_string_with_reso)?

您可以使用 from pandas._libs.tslibs.parsing import parse_time_string 内部调用 parse_datetime_string_with_reso 和 returns 分辨率。