Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Lib/_pydatetime.py
Original file line number Diff line number Diff line change
Expand Up @@ -1987,7 +1987,7 @@ def fromisoformat(cls, date_string):
if became_next_day:
year, month, day = date_components
# Only wrap day/month when it was previously valid
if month <= 12 and day <= (days_in_month := _days_in_month(year, month)):
if 1 <= month <= 12 and day <= (days_in_month := _days_in_month(year, month)):
# Calculate midnight of the next day
day += 1
if day > days_in_month:
Expand Down
1 change: 1 addition & 0 deletions Lib/test/datetimetester.py
Original file line number Diff line number Diff line change
Expand Up @@ -3773,6 +3773,7 @@ def test_fromisoformat_fails_datetime_valueerror(self):
"2009-04-01T12:30:90", # Second out of range
"2009-04-01T12:90:45", # Minute out of range
"2009-04-01T25:30:45", # Hour out of range
"2009-00-01T24:00:00", # Month out of range (below)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"2009-00-01T24:00:00", # Month out of range (below)
"2009-00-01T24:00:00", # Month below range

"2009-13-01T24:00:00", # Month out of range
"9999-12-31T24:00:00", # Year out of range
]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Fix :meth:`datetime.datetime.fromisoformat` raising an unexpected error on an
out-of-range month combined with a ``24:00`` time, such as
``"2009-00-01T24:00:00"``. It now consistently raises :exc:`ValueError`.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Fix :meth:`datetime.datetime.fromisoformat` raising an unexpected error on an
out-of-range month combined with a ``24:00`` time, such as
``"2009-00-01T24:00:00"``. It now consistently raises :exc:`ValueError`.
Fix :meth:`datetime.datetime.fromisoformat` raising :exc:`AssertionError`
instead of :exc:`ValueError` for an out-of-range month combined with a
``24:00`` time.

2 changes: 1 addition & 1 deletion Modules/_datetimemodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -6144,7 +6144,7 @@ datetime_datetime_fromisoformat_impl(PyTypeObject *type, PyObject *string)
goto error;
}

if ((hour == 24) && (month <= 12)) {
if ((hour == 24) && (month >= 1) && (month <= 12)) {
Comment thread
StanFromIreland marked this conversation as resolved.
Outdated
int d_in_month = days_in_month(year, month);
if (day <= d_in_month) {
if (minute == 0 && second == 0 && microsecond == 0) {
Expand Down
Loading