Форматирование timedelta объекта python - PullRequest
0 голосов
/ 29 сентября 2011

Я написал этот небольшой скрипт для форматирования объекта 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 Ответ

2 голосов
/ 29 сентября 2011

экземпляр timedelta имеет атрибуты .days и .seconds, которые сохраняют несколько строк. Они также сохраняют небольшие значения, поэтому вы можете преобразовать их в int один раз раньше, а не для каждого формата строки. Это также устраняет необходимость в abs () и .floor.

...