This rule raises an issue when using the `pytz` library on a codebase using Python 3.9 or later.

== Why is this an issue?

In Python 3.9 and later, the `zoneinfo` module is the recommended tool for handling timezones, replacing the `pytz` library. This recommendation is based on several key advantages.

First, `zoneinfo` is part of Python's standard library, making it readily available without needing additional installation, unlike `pytz`.

Second, `zoneinfo` integrates seamlessly with Python's datetime module. You can directly use `zoneinfo` timezone objects when creating `datetime` objects, making it more intuitive and less error-prone than `pytz`, which requires a separate localize method for this purpose.

Third, `zoneinfo` handles historical timezone changes more accurately than `pytz`. When a `pytz` timezone object is used, it defaults to the earliest known offset, which can lead to unexpected results. `zoneinfo` does not have this issue.

Lastly, `zoneinfo` uses the system's IANA time zone database when available, ensuring it works with the most up-to-date timezone data. In contrast, `pytz` includes its own copy of the IANA database, which may not be as current.

In summary, `zoneinfo` offers a more modern, intuitive, and reliable approach to handling timezones in Python 3.9 and later, making it the preferred choice over `pytz`.

== How to fix it

To fix this is issue use a `zoneinfo` timezone object when constructing a `datetime` instead of the `pytz` library.

=== Code examples

==== Noncompliant code example

[source,python,diff-id=1,diff-type=noncompliant]
----
from datetime import datetime
import pytz

dt = pytz.timezone('America/New_York'').localize(datetime(2022, 1, 1))  # Noncompliant: the localize method is needed to avoid bugs (see S6887)
----

==== Compliant solution

[source,python,diff-id=1,diff-type=compliant]
----
from datetime import datetime
from zoneinfo import ZoneInfo

dt = datetime(2022, 1, 1, tzinfo=ZoneInfo('America/New_York'))  # OK: timezone object can be used safely through the datetime constructor
----


== Resources
=== Documentation

* PEP 615 - https://peps.python.org/pep-0615/[Support for the IANA Time Zone Database in the Standard Library]

=== Related rules

* S6887 - pytz.timezone should not be passed to the datetime.datetime constructor
