【问题标题】:Parse datetime-range or duration given a partial datetime在给定部分日期时间的情况下解析日期时间范围或持续时间
【发布时间】:2021-12-11 19:42:49
【问题描述】:

假设我得到了一个部分日期时间字符串。我希望获得它所代表的日期时间,以及给定日期时间的分辨率。

例如:

  • "2021-01-06 12" -> 2021-01-06 12:00:00.000000"hour"
  • "2020-03" -> 2020-03-01 00:00:00.000000"month"
  • "2020-03-01" -> 2020-03-01 00:00:00.000000"day"

这个想法是使用给定的部分日期时间字符串作为时间范围规范。这意味着不要写"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_reso 似乎返回了我想要的。有谁知道我如何访问它(使用from pandas._libs.tslibs.parsing import parse_datetime_string_with_reso 无法访问)?

【问题讨论】:

  • 您需要使用pandas._libs.tslibs.parsing.parse_time_string,它在内部调用parse_datetime_string_with_reso
  • @AsishM。妈的我傻没有看到它也返回分辨率。谢谢!我会确保它有效。将其发布为答案。 ——
  • @AsishM。它确实做到了我想要的。

标签: python pandas datetime datetime-format python-datetime


【解决方案1】:

具体解决这部分问题:

编辑:似乎内部函数 pandas._libs.tslibs.parsing.parse_datetime_string_with_reso 返回了我想要的。有谁知道我如何访问它(使用 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 并返回分辨率。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这和我想要的不一样。还是谢谢你。
    【解决方案3】:

    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
    

    【讨论】:

    • 感谢您的回答,但我不希望它只是处理缺少的部分 - 我有。我希望它也能返回解析时间的分辨率。
    猜你喜欢
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 2019-09-15
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    相关资源
    最近更新 更多