sdispater / pendulum

Python datetimes made easy
https://pendulum.eustace.io
MIT License
6.12k stars 372 forks source link

Bug / regression: Unable to parse string '031' with 'DDDD' format using Pendulum 3.0.0 #797

Open philippe-bollard opened 5 months ago

philippe-bollard commented 5 months ago

Context

Issue

Pendulum 3 is unable to parse string '031' with 'DDDD' format:

>>> import pendulum
>>> pendulum.__version__
'3.0.0'

>>> p = pendulum.from_format(f"2023-031", 'YYYY-DDDD')

Traceback (most recent call last):

  File "[..]/python3.9/site-packages/pendulum/__init__.py", line 284, in from_format
    def duration(
  File "[..]/python3.9/site-packages/pendulum/formatting/formatter.py", line 416, in parse

  File "[..]/python3.9/site-packages/pendulum/formatting/formatter.py", line 482, in _check_parsed
    "{}-{:>03d}".format(validated["year"], parsed["day_of_year"])
  File "[..]/python3.9/site-packages/pendulum/parser.py", line 30, in parse

  File "[..]/python3.9/site-packages/pendulum/parser.py", line 43, in _parse
    return pendulum.now()
  File "[..]/python3.9/site-packages/pendulum/parsing/__init__.py", line 78, in parse
    """
  File "[..]/python3.9/site-packages/pendulum/parsing/__init__.py", line 125, in _parse
    # so we fallback on the dateutil parser
pendulum.parsing.exceptions.ParserError: Unable to parse string [2023-031]

but it works for other values:

>>> p = pendulum.from_format(f"2023-030", 'YYYY-DDDD')
>>> p
DateTime(2023, 1, 30, 0, 0, 0, tzinfo=Timezone('UTC'))
>>> p = pendulum.from_format(f"2023-032", 'YYYY-DDDD')
>>> p
DateTime(2023, 2, 1, 0, 0, 0, tzinfo=Timezone('UTC'))

The bug does not seem to be present in the previous version of Pendulum :

>>> import pendulum
>>> pendulum.__version__
'2.1.2'
>>> p = pendulum.from_format(f"2023-031", 'YYYY-DDDD')
>>> p
DateTime(2023, 1, 31, 0, 0, 0, tzinfo=Timezone('UTC'))