@@ -147,28 +147,29 @@ def datetimes_equal(_dt_1: datetime.datetime, _dt_2: datetime.datetime, /, *, ch
147147 """
148148 Check if two timezone-aware datetime objects are equal.
149149
150- This is needed because equals checks for datetime objects can give false results
151- if `zoneinfo.ZoneInfo` objects are used for `tzinfo`:
150+ This is needed because == / != checks for datetime objects don't check for timezone-awareness:
152151
153152 ```python 3.11
154153 import zoneinfo
155154 import datetime
156155
157156 tz = zoneinfo.ZoneInfo("Europe/Helsinki")
158157
159- dt_1 = datetime.datetime(2021, 1, 1, tzinfo=tz)
160- dt_2 = datetime.datetime(2021, 1, 1, tzinfo=datetime.UTC)
161- dt_3 = datetime.datetime(2021, 1, 1)
158+ dt_zi = datetime.datetime(2021, 1, 1, tzinfo=tz)
159+ dt_tz = datetime.datetime(2021, 1, 1, tzinfo=datetime.UTC)
160+ dt_naive = datetime.datetime(2021, 1, 1)
162161
163- assert dt_1 >= dt_3 # Works
164- assert dt_1 <= dt_3 # Works??? This should be False, right?
165- assert dt_2 >= dt_3 # raises "TypeError: can't compare offset-naive and offset-aware times"
162+ # There might not be true, since on datetime is timezone-aware and the other is not.
163+ assert dt_zi != dt_naive
164+ assert dt_tz != dt_naive
166165 ```
167166 """
168167 if _dt_1 .utcoffset () is None :
169- raise ValueError ("First datetime must be timezone-aware using `datetime.timezone` objects." )
168+ msg = "First datetime must be timezone-aware using `datetime.timezone` objects."
169+ raise ValueError (msg )
170170 if _dt_2 .utcoffset () is None :
171- raise ValueError ("Second datetime must be timezone-aware using `datetime.timezone` objects." )
171+ msg = "Second datetime must be timezone-aware using `datetime.timezone` objects."
172+ raise ValueError (msg )
172173 if check_same_tz and _dt_1 .tzname () != _dt_2 .tzname ():
173174 msg = f"Timezones of both datetimes must be the same. Got: { _dt_1 .tzname ()} and { _dt_2 .tzname ()} "
174175 raise ValueError (msg )
@@ -179,22 +180,22 @@ def times_equal(_t_1: datetime.time, _t_2: datetime.time, /, *, check_same_tz: b
179180 """
180181 Check if two timezone-aware time objects are equal.
181182
182- This is needed because equals checks for time objects can give false results
183- if `zoneinfo.ZoneInfo` objects are used for `tzinfo`:
183+ This is needed because == / != checks for time objects don't check for timezone-awareness,
184+ and / < / <= / > / >= checks can give false results if `zoneinfo.ZoneInfo` objects are used for `tzinfo`:
184185
185186 ```python 3.11
186187 import zoneinfo
187188 import datetime
188189
189190 tz = zoneinfo.ZoneInfo("Europe/Helsinki")
190191
191- t_1 = datetime.time(tzinfo=tz)
192- t_2 = datetime.time(tzinfo=datetime.UTC)
193- t_3 = datetime.time()
192+ t_zi = datetime.time(tzinfo=tz)
193+ t_tz = datetime.time(tzinfo=datetime.UTC)
194+ t_naive = datetime.time()
194195
195- assert t_1 >= t_3 # Works
196- assert t_1 <= t_3 # Works??? This should be False, right?
197- assert t_2 >= t_3 # raises "TypeError: can't compare offset-naive and offset-aware times"
196+ assert t_zi >= t_naive # Works
197+ assert t_zi <= t_naive # Works??? This should be False, right?
198+ assert t_tz >= t_naive # raises "TypeError: can't compare offset-naive and offset-aware times"
198199 ```
199200 """
200201 if _t_1 .utcoffset () is None :
0 commit comments