diff --git a/src/humanize/time.py b/src/humanize/time.py index 4a07d52..a36f3b1 100644 --- a/src/humanize/time.py +++ b/src/humanize/time.py @@ -61,9 +61,9 @@ def _abs_timedelta(delta: dt.timedelta) -> dt.timedelta: Returns: datetime.timedelta: Absolute timedelta. """ + # Avoid datetime arithmetic: now+(now-far_future) underflows below year 1. if delta.days < 0: - now = _now() - return now - (now + delta) + return -delta return delta diff --git a/tests/test_time.py b/tests/test_time.py index 7699770..22a276a 100644 --- a/tests/test_time.py +++ b/tests/test_time.py @@ -179,6 +179,10 @@ def test_naturaldelta(test_input: float | dt.timedelta, expected: str) -> None: (NOW - dt.timedelta(days=365 * 2 + 65), "2 years ago"), (NOW - dt.timedelta(days=365 + 4), "1 year, 4 days ago"), ("NaN", "NaN"), + # Far-future datetimes used to OverflowError in _abs_timedelta. + (dt.datetime(9999, 1, 1), "7,994 years from now"), + (dt.datetime(5000, 6, 15), "2,992 years from now"), + (dt.timedelta(days=-1_000_000), "2,739 years from now"), ], ) def test_naturaltime(