version of strtimedelta which is not english specific days hours minutes seconds microseconds getdurationcomponentsduration string 02d 02d 02d formathours minutes seconds if days string formatdays string if microseconds string 06d formatmicroseconds return string def durationisostringduration if duration datetime timedelta0 sign duration 1 else sign days hours minutes seconds microseconds getdurationcomponentsduration ms 06d formatmicroseconds if microseconds else return pdt 02dh 02dm 02ds format sign days hours minutes seconds ms def durationmicrosecondsdelta return 24 60 60 delta days delta seconds 1000000 delta microseconds version of str timedelta which is not english specific
import datetime


def _get_duration_components(duration):
    days = duration.days
    seconds = duration.seconds
    microseconds = duration.microseconds

    minutes = seconds // 60
    seconds %= 60

    hours = minutes // 60
    minutes %= 60

    return days, hours, minutes, seconds, microseconds


def duration_string(duration):
    
    days, hours, minutes, seconds, microseconds = _get_duration_components(duration)

    string = "{:02d}:{:02d}:{:02d}".format(hours, minutes, seconds)
    if days:
        string = "{} ".format(days) + string
    if microseconds:
        string += ".{:06d}".format(microseconds)

    return string


def duration_iso_string(duration):
    if duration < datetime.timedelta(0):
        sign = "-"
        duration *= -1
    else:
        sign = ""

    days, hours, minutes, seconds, microseconds = _get_duration_components(duration)
    ms = ".{:06d}".format(microseconds) if microseconds else ""
    return "{}P{}DT{:02d}H{:02d}M{:02d}{}S".format(
        sign, days, hours, minutes, seconds, ms
    )


def duration_microseconds(delta):
    return (24 * 60 * 60 * delta.days + delta.seconds) * 1000000 + delta.microseconds