代码之家  ›  专栏  ›  技术社区  ›  James Edwards

在Python中解析时间戳

  •  2
  • James Edwards  · 技术社区  · 7 年前

    我有一个应用程序,需要解析四种不同格式的时间戳。

    HH:MM:SS
    HH:MM:SS.mm
    MM:SS
    MM:SS.mm
    

    如何编写函数将这些格式解析为 timedelta 对象

    我试着逐一遍历这些字符 break 当我看到 : ,但我的代码乱七八糟,所以我不想把它作为基线。

    1 回复  |  直到 7 年前
        1
  •  3
  •   pault Tanjin    7 年前

    下面是一种使用 datetime.datetime.strptime() :

    如果你不提前知道 format 您的输入将在中,您可以尝试将所有内容包装在 try / catch

    strptime() 返回a datetime 对象,所以调用 .time() 函数仅获取时间部分。看见 this post 了解更多详细信息。

    import datetime
    
    def parse_timestamp(ts):
        formats = [
            "%H:%M:%S", #HH:MM:SS
            "%H:%M:%S.%f", #HH:MM:SS.mm
            "%M:%S", #MM:SS
            "%M:%S.%f" #MM:SS.mm
        ]
        for f in formats:
            try:
                return datetime.datetime.strptime(ts, f).time()
            except ValueError:
                pass
        return None
    

    示例:

    timestamps = [
        "12:34:56",
        "12:34:56.78",
        "34:56",
        "34:56.78"
    ]
    for ts in timestamps:
        print parse_timestamp(ts)
    

    输出:

    12:34:56
    12:34:56.780000
    00:34:56
    00:34:56.780000
    

    或者,如果您知道具体的格式,您可以使用 datetime.datetime.strptime(ts, f).time() 直接地

    更新1

    如果要转换为 timedelta s、 您可以使用 parse_timestamp() 以及 timedelta constructor :

    def time_to_timedelta(t):
        td = datetime.timedelta(
            seconds=t.second,
            microseconds=t.microsecond,
            minutes=t.minute,
            hours=t.hour
        )
        return td
    

    这是一个 related post 你可能也会觉得有用。