Format timedelta to string

后端 未结 28 2067
春和景丽
春和景丽 2020-11-22 03:57

I\'m having trouble formatting a datetime.timedelta object.

Here\'s what I\'m trying to do: I have a list of objects and one of the members of the cl

28条回答
  •  萌比男神i
    2020-11-22 04:02

    from django.utils.translation import ngettext
    
    def localize_timedelta(delta):
        ret = []
        num_years = int(delta.days / 365)
        if num_years > 0:
            delta -= timedelta(days=num_years * 365)
            ret.append(ngettext('%d year', '%d years', num_years) % num_years)
    
        if delta.days > 0:
            ret.append(ngettext('%d day', '%d days', delta.days) % delta.days)
    
        num_hours = int(delta.seconds / 3600)
        if num_hours > 0:
            delta -= timedelta(hours=num_hours)
            ret.append(ngettext('%d hour', '%d hours', num_hours) % num_hours)
    
        num_minutes = int(delta.seconds / 60)
        if num_minutes > 0:
            ret.append(ngettext('%d minute', '%d minutes', num_minutes) % num_minutes)
    
        return ' '.join(ret)
    

    This will produce:

    >>> from datetime import timedelta
    >>> localize_timedelta(timedelta(days=3660, minutes=500))
    '10 years 10 days 8 hours 20 minutes'
    

提交回复
热议问题