如何在几秒钟内将字符串格式的 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
我从之前的 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