Format timedelta to string

后端 未结 28 1705
春和景丽
春和景丽 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条回答
  •  广开言路
    2020-11-22 04:10

    Questioner wants a nicer format than the typical:

      >>> import datetime
      >>> datetime.timedelta(seconds=41000)
      datetime.timedelta(0, 41000)
      >>> str(datetime.timedelta(seconds=41000))
      '11:23:20'
      >>> str(datetime.timedelta(seconds=4102.33))
      '1:08:22.330000'
      >>> str(datetime.timedelta(seconds=413302.33))
      '4 days, 18:48:22.330000'
    

    So, really there's two formats, one where days are 0 and it's left out, and another where there's text "n days, h:m:s". But, the seconds may have fractions, and there's no leading zeroes in the printouts, so columns are messy.

    Here's my routine, if you like it:

    def printNiceTimeDelta(stime, etime):
        delay = datetime.timedelta(seconds=(etime - stime))
        if (delay.days > 0):
            out = str(delay).replace(" days, ", ":")
        else:
            out = "0:" + str(delay)
        outAr = out.split(':')
        outAr = ["%02d" % (int(float(x))) for x in outAr]
        out   = ":".join(outAr)
        return out
    

    this returns output as dd:hh:mm:ss format:

    00:00:00:15
    00:00:00:19
    02:01:31:40
    02:01:32:22
    

    I did think about adding years to this, but this is left as an exercise for the reader, since the output is safe at over 1 year:

    >>> str(datetime.timedelta(seconds=99999999))
    '1157 days, 9:46:39'
    

提交回复
热议问题