2011-09-29 1 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

나는 그것을하기 더 쉽고 더 평범한 방법이 있기를 바랬다. 방금 배우고 싶습니다 :) –

+0

당신이 사용하는 파이썬을 항상 언급하십시오. 이 경우 .total_seconds는 3.2 – Tobias

답변

2

timedelta 인스턴스에는 몇 줄을 저장하는 .days 및 .seconds 속성이 있습니다. 또한 값을 작게 유지하므로 각 문자열 형식 대신 int로 일찍 변환 할 수 있습니다. 또한 abs() 및 .floor가 필요하지 않습니다.