tags: python hms time A convention I use for writing time durations without needing symbols like colons, good for filenames for example, is `4h34m5s` where the trailing `s` is optional, so `4h3` is the same as `4h3s`. Here are a couple of simple convenience functions that convert between this and an integral number of seconds. ```py import re def to_dhms_from_int(x): d, h = divmod(x,24*3600) h, x = divmod(x,3600) m, s = divmod(x,60) return d,h,m,s def from_dhms_to_int(d=0,h=0,m=0,s=0): return s + 60*(m + 60*( h + 24*d )) def to_hmsstr_from_dhms(d=0,h=0,m=0,s=0): t = "" if d > 0: t += f"{d}d" if h > 0: t += f"{h:02d}h" if m > 0: t += f"{m:02d}m" if s > 0: t += f"{s:02d}s" t = t.lstrip("0") return t def from_hmsstr_to_dhms(x): match = re.match(r"(?:(\d+)d)?(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s?)?$",x) if not match: raise ValueError(f"Not valid dhms: '{x}'") dhms = [ int(y) if y is not None else 0 for y in match.groups() ] return dhms def dhms(x): return from_dhms_to_int(*from_hmsstr_to_dhms(x)) def todhms(x): return to_hmsstr_from_dhms(*to_dhms_from_int(x)) tests = [ "4d7h2m3s", "4d7h2m3", "5m3s", "5m3", "4h3s", "4h2", "4h2m3s", "4h2m3", "43", ] for x in tests: print(f"{x}: {from_hmsstr_to_dhms(x)} -- {dhms(x)} == {todhms(dhms(x))}") ```