我的定义出现负值问题。每当ft为负数时,它将返回错误:
ValueError:int()的基数为10的无效文字:' - '
def formatTime(_seconds):
ft = str(datetime.timedelta(seconds=_seconds))
if int(ft[0]) <= 0:
ms = ft.find('.')
if ms < 0:
return "%s.000" % ft[2:11]
else:
return ft[2:11]
else:
x = ft.find(':')
if x > -1:
hlen = len(ft[0:x])
ms = ft.find('.')
if ms < 0:
return "%s.000" % ft[0:((11 + hlen) -1)]
else:
return ft[0:((11 + hlen) -1)]
else:
x = ft.find('.')
if x > -1:
ms = ft.find('.')
if ms < 0:
return "%s.000" % ft[0:(x + 4)]
else:
return ft[0:(x + 4)]
else:
ms = ft.find('.')
if ms < 0:
return "%s.000" % ft[0:11]
else:
return ft[0:11]
我是初学者,我现在老老实实地失去了。
答案 0 :(得分:3)
这里有一个问题:
ft = str(datetime.timedelta(seconds=_seconds))
print(ft) # I added this
if int(ft[0]) <= 0:
输出:
>>> formatTime(-10)
-1 day, 23:59:50
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "test.py", line 5, in formatTime
if int(ft[0]) <= 0:
ValueError: invalid literal for int() with base 10: '-'
如您所见,ft[0]
是单个字符'-'
,无法转换为整数。
考虑使用ft = datetime.timedelta(seconds=_seconds).total_seconds()
来返回一个带符号的浮点数,以便进行计算。
答案 1 :(得分:0)
不是将其转换为字符串,而是可以执行以下操作:
>>> def convert_timedelta(duration):
#http://goo.gl/Ci4wP
days, seconds = duration.days, duration.seconds
hours = days * 24 + seconds // 3600
minutes = (seconds % 3600) // 60
seconds = (seconds % 60)
return hours, minutes, seconds,duration.microseconds
...
>>> d = timedelta(seconds = -.50)
>>> h, m, sec, ms = convert_timedelta(d)
>>> h
-1
>>> m
59
>>> sec
59
>>> ms
500000
现在,您可以使用这些变量h
,m
,sec
和ms
来完成您的工作。