https://github.com/python/cpython/commit/efcc42ba70fb09333a2be16401da731662e2984b
commit: efcc42ba70fb09333a2be16401da731662e2984b
branch: main
author: Kentaro Jay Takahashi <[email protected]>
committer: picnixz <[email protected]>
date: 2025-05-10T17:33:28+02:00
summary:
gh-132642: document how to render human-readable `timedelta` objects (#133825)
files:
M Doc/library/datetime.rst
M Lib/test/datetimetester.py
diff --git a/Doc/library/datetime.rst b/Doc/library/datetime.rst
index 1ce2013f05da2e..3470f42a6c622d 100644
--- a/Doc/library/datetime.rst
+++ b/Doc/library/datetime.rst
@@ -261,6 +261,22 @@ A :class:`timedelta` object represents a duration, the
difference between two
>>> (d.days, d.seconds, d.microseconds)
(-1, 86399, 999999)
+ Since the string representation of :class:`!timedelta` objects can be
confusing,
+ use the following recipe to produce a more readable format:
+
+ .. code-block:: pycon
+
+ >>> def pretty_timedelta(td):
+ ... if td.days >= 0:
+ ... return str(td)
+ ... return f'-({-td!s})'
+ ...
+ >>> d = timedelta(hours=-1)
+ >>> str(d) # not human-friendly
+ '-1 day, 23:00:00'
+ >>> pretty_timedelta(d)
+ '-(1:00:00)'
+
Class attributes:
diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py
index 55844ec35a90c9..d1882a310bbbb0 100644
--- a/Lib/test/datetimetester.py
+++ b/Lib/test/datetimetester.py
@@ -773,6 +773,9 @@ def test_str(self):
microseconds=999999)),
"999999999 days, 23:59:59.999999")
+ # test the Doc/library/datetime.rst recipe
+ eq(f'-({-td(hours=-1)!s})', "-(1:00:00)")
+
def test_repr(self):
name = 'datetime.' + self.theclass.__name__
self.assertEqual(repr(self.theclass(1)),
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]