如何在几秒钟内将字符串格式的 timedelta 转换回 int 列

How to convert a string formatted timedelta back to int column in seconds

我从之前的 post 中获取了一种将秒数转换为 HH:MM:SS 格式的方法,以将格式正确的列呈现为 table 视觉效果

str(datetime.timedelta(seconds=12345))

输出如下所示:22:00:01

我需要将其返回为 int(秒)

我需要将其逆向工程回 int

我该怎么做

基本上,您会在 space 上拆分字符串以获得“天”部分,在冒号上再次拆分以获得 H/M/S 部分。从那里开始,它只是一些简单的数学。例如:

def tdstring_to_integerseconds(tdstr: str) -> int:
    parts = tdstr.strip(' ').split(' ') # clean surrounding spaces and split
    d = 0 # day default to zero...
    if len(parts) > 1: # if more than one part, we have days specified
        d = int(parts[0])
    s = sum(x*y for x, y in zip(map(int, parts[-1].split(':')), (3600, 60, 1)))
    return 86400*d + s

举个例子

from datetime import timedelta

for td in timedelta(1), timedelta(-1), timedelta(0.5), timedelta(-1.5):
    print(str(td), '->', tdstring_to_integerseconds(str(td)))

# 1 day, 0:00:00 -> 86400
# -1 day, 0:00:00 -> -86400
# 12:00:00 -> 43200
# -2 days, 12:00:00 -> -129600