diff --git a/crates/ruff_linter/resources/test/fixtures/flake8_datetimez/DTZ007.py b/crates/ruff_linter/resources/test/fixtures/flake8_datetimez/DTZ007.py index 7897267f1c..f053978119 100644 --- a/crates/ruff_linter/resources/test/fixtures/flake8_datetimez/DTZ007.py +++ b/crates/ruff_linter/resources/test/fixtures/flake8_datetimez/DTZ007.py @@ -29,6 +29,9 @@ datetime.datetime.strptime("something", something).astimezone() # OK datetime.datetime.strptime("something", something).replace(tzinfo=datetime.timezone.utc) +# OK +datetime.datetime.strptime("something", "something").date() + from datetime import datetime # no replace orastimezone unqualified diff --git a/crates/ruff_linter/src/rules/flake8_datetimez/rules/call_datetime_strptime_without_zone.rs b/crates/ruff_linter/src/rules/flake8_datetimez/rules/call_datetime_strptime_without_zone.rs index 534ca9cb4a..ca8563e611 100644 --- a/crates/ruff_linter/src/rules/flake8_datetimez/rules/call_datetime_strptime_without_zone.rs +++ b/crates/ruff_linter/src/rules/flake8_datetimez/rules/call_datetime_strptime_without_zone.rs @@ -21,6 +21,10 @@ use crate::rules::flake8_datetimez::helpers::DatetimeModuleAntipattern; /// `datetime.datetime.strptime()` without `%z` returns a naive datetime /// object. Follow it with `.replace(tzinfo=)` or `.astimezone()`. /// +/// To make a naive date object on Python 3.13 and earlier, follow it with +/// `datetime.datetime.strptime()` with `.date()`. +/// On Python 3.14 and later, use `datetime.date.strptime()`. +/// /// ## Example /// ```python /// import datetime @@ -155,7 +159,7 @@ fn find_antipattern( return Some(DatetimeModuleAntipattern::NoTzArgumentPassed); }; // Ex) `datetime.strptime(...).astimezone()` - if attr == "astimezone" { + if attr == "astimezone" || attr == "date" { return None; } if attr != "replace" {