在Python中解析时间戳

Jam*_*rds 2 python datetime timestamp

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

HH:MM:SS
HH:MM:SS.mm
MM:SS
MM:SS.mm
Run Code Online (Sandbox Code Playgroud)

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

我尝试过逐一迭代字符,并break在看到 时进行 ing :,但我的代码很混乱,所以我宁愿不将其放在这里作为基线。

pau*_*ult 5

这是一种使用以下方法来做到这一点的方法datetime.datetime.strptime()

如果您事先不知道输入将采用哪种格式try,您可以尝试将所有这些格式都包含在/catch块中。

strptime()返回一个datetime对象,因此调用该.time()函数仅获取时间部分。请参阅这篇文章了解更多详细信息。

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
Run Code Online (Sandbox Code Playgroud)

例子:

timestamps = [
    "12:34:56",
    "12:34:56.78",
    "34:56",
    "34:56.78"
]
for ts in timestamps:
    print parse_timestamp(ts)
Run Code Online (Sandbox Code Playgroud)

输出:

12:34:56
12:34:56.780000
00:34:56
00:34:56.780000
Run Code Online (Sandbox Code Playgroud)

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

更新1

如果您想转换为timedeltas,可以使用parse_timestamp()timedelta构造函数的输出来执行此操作:

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

这是一篇相关文章,您可能也会觉得有用。