こんにちは、なぜこれが起こっているのか理解するためには助けが必要です。ときESTIMATED_DURATION> self.get_program_duration()負の値を持つPython timedeltaの問題
def get_program_time_budget(self):
return self.estimated_duration-self.get_program_duration()
すべての罰金をが、これは物事が面白い取得、他の道を行くとき: 私はイベントプログラムに「残り時間」を追跡する方法があります。
結果がユーザーに表示されます。結果-5分を取得する方法を
Estimated 11 hours Allocated 11 hours 5 minutes Remaining -1 day 23 hours 55 minutes
任意のアイデア:結果が負になるとき
Estimated 11 hours Allocated 10 hours 55 minutes Remaining 5 minutes
それは、このしていますか?
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」が働く方法です。結果は常に正規化され、 'days'値だけが負の値になります。日の値が-5の場合、他のフィールドを無効にしますか? –
私たちは2つのtimedeltasを引き算する方法を知っています。私たちが知らないのは、あなたが結果を表示するために使用したコードです。より良いアドバイスをお寄せください。 –
負のtimedelta値で正常に動作させたい場合( "-1分"はちょうど "-1分"、**では "-1日+23時59分"ではない)、 'relativetimedelta'モジュールを使うことができます[dateutil](http://labix.org/python-dateutil)にあります。 – florisla