![github-actions[bot]](/assets/img/avatar_default.png)
* Create rule S6886 * Specify rule * CR fixes * CR fixes * Modify rule classification and impacts * Invert two words --------- Co-authored-by: maksim-grebeniuk-sonarsource <maksim-grebeniuk-sonarsource@users.noreply.github.com> Co-authored-by: Maksim Grebeniuk <maksim.grebeniuk@sonarsource.com> Co-authored-by: Ghislain Piot <ghislain.piot@sonarsource.com>
47 lines
1.3 KiB
Plaintext
47 lines
1.3 KiB
Plaintext
This rule raises an issue when trying to perform comparison or arithmetic operations between `offset-naive` and `offset-aware` Datetimes.
|
|
|
|
== Why is this an issue?
|
|
|
|
`datetime.datetime` and `datetime.time` objects may be categorized as "aware" or "naive" depending on whether or not they include timezone information.
|
|
|
|
Comparison or arithmetic operations between `offset-naive` and `offset-aware` datetimes raise a `TypeError`.
|
|
|
|
== How to fix it
|
|
Perform comparison or arithmetic operations only between offset-naive or only between offset-aware Datetimes.
|
|
|
|
=== Code examples
|
|
|
|
==== Noncompliant code example
|
|
|
|
[source,python,diff-id=1,diff-type=noncompliant]
|
|
----
|
|
import datetime
|
|
from pytz import timezone
|
|
|
|
tz = timezone('America/New_York')
|
|
dt1 = datetime.datetime(2023, 5, 23, tzinfo=tz)
|
|
dt2 = datetime.datetime(2023, 5, 24)
|
|
|
|
if dt1 < dt2: # Noncompliant: TypeError: can't compare offset-naive and offset-aware datetimes
|
|
...
|
|
----
|
|
|
|
==== Compliant solution
|
|
|
|
[source,python,diff-id=1,diff-type=compliant]
|
|
----
|
|
import datetime
|
|
from pytz import timezone
|
|
|
|
tz = timezone('America/New_York')
|
|
dt1 = datetime.datetime(2023, 5, 23, tzinfo=tz)
|
|
dt2 = datetime.datetime(2023, 5, 24, timezone.utc)
|
|
|
|
if dt1 < dt2: # OK
|
|
...
|
|
----
|
|
|
|
== Resources
|
|
=== Documentation
|
|
* Python documentation - https://docs.python.org/3/library/datetime.html#aware-and-naive-objects[Aware and Naive Objects]
|