嗨,我需要一些幫助,以瞭解爲什麼發生這種情況。 我有一個事件程序來跟蹤「剩餘時間」的方法:Python的timedelta問題與負值
def get_program_time_budget(self):
return self.estimated_duration-self.get_program_duration()
一切都很好,當ESTIMATED_DURATION> self.get_program_duration(),但是當這個走另一條路事情變得有趣。
結果顯示給用戶:
Estimated 11 hours Allocated 10 hours 55 minutes Remaining 5 minutes
當結果爲負時它不這樣:
Estimated 11 hours Allocated 11 hours 5 minutes Remaining -1 day 23 hours 55 minutes
任何想法如何得到的結果-5分鐘?
編輯: 這裏是timedelta格式(注意,這是一個Django的過濾器,所以接收timedelta值作爲海峽 - 但它被存儲爲一個timedelta):
def format_duration(value):
try:
delim = ':'
toks = value.split(',')
hour = minute = ''
d_string = value.count('day') and toks[0] or ''
h, m, s = d_string and toks[-1].strip().split(delim) or value.split(delim)
try:
hour = int(h)
except:
pass
try:
minute = int(m)
except:
pass
h_string = "%s%s%s" % (hour and hour or '', (hour and ' hour' or ''),(hour and hour > 1 and 's' or '') )
m_string = "%s%s%s" % (minute and minute or '', (minute and ' minute' or ''),(minute and minute > 1 and 's' or ''))
return "%s %s %s" % (d_string, h_string, m_string)
except Exception, e:
logging.error("Error in format_duration -> %s. Duration value=%s" % (e, value))
return ''v
這是'timedelta'對負值的工作方式。結果總是標準化的,因此只有「天」值是負值。如果天數的值是-5,你想否定其他領域? –
我們知道如何減去兩個timedeltas。我們不知道的是您用來顯示結果的代碼。爲了獲得更好的建議,請透露。 –
如果你想以一種理智的方式處理負的timedelta值(「-1分鐘」只是「-1分鐘」,而不是**「-1天加23h59」),你可以使用'relativetimedelta'模塊存在於[dateutil](http://labix.org/python-dateutil)中。 – florisla