{"id":482,"library":"durationpy","title":"durationpy","description":"durationpy is a Python module designed for converting between Python's `datetime.timedelta` objects and Go's standard `time.Duration` string format. The current version, 0.10, was released on May 17, 2025, and the project demonstrates an active release cadence with several updates in recent years, indicating ongoing maintenance.","status":"active","version":"0.10","language":"python","source_language":"en","source_url":"https://github.com/icholy/durationpy","tags":["datetime","duration","golang","time","parsing","formatting"],"install":[{"cmd":"pip install durationpy","lang":"bash","label":"Install with pip"}],"dependencies":[],"imports":[{"symbol":"from_str","correct":"from durationpy import from_str"},{"symbol":"to_str","correct":"from durationpy import to_str"}],"quickstart":{"code":"import durationpy\nimport datetime\n\n# Parse a Go duration string into a datetime.timedelta object\ntd = durationpy.from_str(\"4h3m2s1ms\")\nprint(f\"Parsed timedelta: {td}\")\nprint(f\"Total seconds: {td.total_seconds()}\")\n\n# Convert a datetime.timedelta object back to a Go duration string\nduration_str = durationpy.to_str(datetime.timedelta(hours=1, minutes=30, seconds=15))\nprint(f\"Formatted duration string: {duration_str}\")\n\n# Example demonstrating nanosecond precision loss\ntd_nano_input = \"1h1m1s1ns\"\ntd_nano_parsed = durationpy.from_str(td_nano_input)\nprint(f\"Original Go duration: {td_nano_input}\")\nprint(f\"Parsed (nanosecond precision is lost): {td_nano_parsed}\")","lang":"python","description":"This quickstart demonstrates how to use `durationpy.from_str` to parse a Go duration string into a `datetime.timedelta` object and `durationpy.to_str` to convert a `datetime.timedelta` back into a Go duration string. It also highlights the inherent precision limitation due to `datetime.timedelta`'s microsecond resolution."},"warnings":[{"fix":"Be aware of this inherent limitation. If nanosecond precision is critical, consider handling time durations as raw integer nanoseconds or using a different time library if available that supports higher precision.","message":"Nanosecond precision is lost when parsing Go duration strings that include nanoseconds (e.g., '1ns') because Python's `datetime.timedelta` object natively supports only microsecond resolution.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Ensure all input duration strings strictly adhere to Go's specified `time.Duration` format. Pre-validate or sanitize user-provided duration strings before passing them to `durationpy.from_str`.","message":"The `durationpy` library is specifically designed to parse Go's `time.Duration` string format (e.g., '1h30m15s'). It will not correctly parse arbitrary human-readable duration strings (e.g., '1 hour and 30 minutes', '2 days, 4 hours'). Incorrect formats will likely raise `ValueError` or return unexpected results.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"search_vec":"'0.10':25 '17':30 '2025':31 'activ':37 'cadenc':39 'convert':9 'current':23 'datetim':49 'datetime.timedelta':13 'demonstr':35 'design':7 'durat':50 'durationpi':1,2 'format':21,54 'go':16 'golang':51 'indic':46 'mainten':48 'may':29 'modul':6 'object':14 'ongo':47 'pars':53 'project':34 'python':5,11 'recent':44 'releas':27,38 'sever':41 'standard':18 'string':20 'time':52 'time.duration':19 'updat':42 'version':24 'year':45","created_at":"2026-03-28T15:15:30.226620+00:00","updated_at":"2026-04-16T14:43:35.444787+00:00","problems":[{"fix":"Install the library using pip: `pip install durationpy`","cause":"The 'durationpy' library is not installed in your Python environment or is not accessible via the Python path.","error":"ModuleNotFoundError: No module named 'durationpy'"},{"fix":"Provide a correctly formatted Go-style duration string (e.g., '10s', '1h30m', '5m2s'). Refer to the `durationpy` documentation for supported units and formats.","cause":"The input string provided to `durationpy.from_str()` does not conform to Go's standard `time.Duration` string format, which `durationpy` expects. For example, it does not support ISO 8601 duration strings like 'PT10S'.","error":"ValueError: Invalid duration string format: 'PT10S'"},{"fix":"Ensure the input argument is a `datetime.timedelta` object. For example, `from datetime import timedelta; durationpy.to_str(timedelta(seconds=10))`.","cause":"An object that is not a `datetime.timedelta` instance (e.g., a string or integer) was passed to a `durationpy` function that expects a `timedelta` object, such as `durationpy.to_str()`.","error":"TypeError: argument must be datetime.timedelta, not str"}],"ecosystem":"pypi","meta_description":null,"install_score":100,"quickstart_score":80,"quickstart_tag":"verified","pypi_latest":"0.10","cli_name":"","cli_version":null,"type":"library","homepage":null,"github":"https://github.com/icholy/durationpy","docs":null,"changelog":null,"pypi":"https://pypi.org/project/durationpy/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null,"categories":["serialization","data"],"base_url":null,"auth_type":null,"provenance":{"verified_status":"passing","verified_at":"2026-06-28","last_verified":"2026-06-28","next_check":"2026-07-28","install_tag":"verified"}}