-3

我的定义有负值问题。每当 ft 为负时,它都会返回一个错误:
ValueError: invalid literal for int() with base 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]

我是一个初学者,我现在真的迷路了。

4

2 回答 2

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()返回有符号浮点数的 来进行计算。

于 2013-06-30T16:17:18.913 回答
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

现在您可以使用这些变量hmsecms完成您的工作。

于 2013-06-30T16:31:33.720 回答