2011-09-29 99 views
0

我寫了這個小腳本根據我的需要格式化timedelta對象:格式化timedelta對象蟒蛇

def due_format(self): 
     time_diff = abs((self.due - datetime.datetime.now()).total_seconds()) 
     days = time_diff/60/60/24 
     hours = time_diff/60/60 
     minutes = time_diff/60 
     hours_wo_days = hours - (math.floor(days) * 24) 
     minutes_wo_hours = minutes - (math.floor(hours) * 60) 
     if (days >= 7): 
      self.due_format = '{} Days'.format(int(days)) 
     elif (hours > 48): 
      self.due_format = '{} Days, {} Hours'.format(int(days), int(hours_wo_days)) 
     elif (hours <= 48 and hours >= 10): 
      self.due_format = '{} Hours'.format(int(hours)) 
     elif (hours <= 1): 
      self.due_format = '{} Minutes'.format(int(minutes)) 
     elif (hours < 10): 
      self.due_format = '{} Hours, {:.0f} Minutes'.format(int(hours), int(minutes_wo_hours)) 

我收到我的做法使事情變得過於複雜的感覺,想問問你們,如果你會以不同的方式攻擊這個問題。有沒有我可以利用的捷徑?我希望這個問題適合於SO。

+1

你能解釋一下,你對目前的方法感到不滿意嗎? – NPE

+0

我只是希望有一個更容易/更pythonic的方式來做到這一點。只是想學習:) –

+0

總是提到你使用的是什麼Python。在這種情況下.total_seconds意味着3.2 – Tobias

回答

2

timedelta實例具有保存幾行的屬性.days和.seconds。它們也保持較小的值,所以你可以一次轉換爲int而不是每個字符串格式。這也消除了對abs()和.floor的需求。