格式化timedelta对象python

时间:2011-09-29 06:40:06

标签: python formatting 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 个答案:

答案 0 :(得分:2)

timedelta实例具有.days和.seconds属性,可以节省几行。它们还保持较小的值,因此您可以提前转换为int,而不是每个字符串格式。这也消除了对abs()和.floor的需求。