Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit c12240e

Browse filesBrowse files
gh-114728: Fix documentation for comparison of objects in datetime module (GH-114749)
1 parent 9872855 commit c12240e
Copy full SHA for c12240e

File tree

Expand file treeCollapse file tree

1 file changed

+50
-68
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+50
-68
lines changed

‎Doc/library/datetime.rst

Copy file name to clipboardExpand all lines: Doc/library/datetime.rst
+50-68Lines changed: 50 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -400,30 +400,7 @@ objects (see below).
400400
the :func:`divmod` function. True division and multiplication of a
401401
:class:`timedelta` object by a :class:`float` object are now supported.
402402

403-
404-
Comparisons of :class:`timedelta` objects are supported, with some caveats.
405-
406-
The comparisons ``==`` or ``!=`` *always* return a :class:`bool`, no matter
407-
the type of the compared object::
408-
409-
>>> from datetime import timedelta
410-
>>> delta1 = timedelta(seconds=57)
411-
>>> delta2 = timedelta(hours=25, seconds=2)
412-
>>> delta2 != delta1
413-
True
414-
>>> delta2 == 5
415-
False
416-
417-
For all other comparisons (such as ``<`` and ``>``), when a :class:`timedelta`
418-
object is compared to an object of a different type, :exc:`TypeError`
419-
is raised::
420-
421-
>>> delta2 > delta1
422-
True
423-
>>> delta2 > 5
424-
Traceback (most recent call last):
425-
File "<stdin>", line 1, in <module>
426-
TypeError: '>' not supported between instances of 'datetime.timedelta' and 'int'
403+
:class:`timedelta` objects support equality and order comparisons.
427404

428405
In Boolean contexts, a :class:`timedelta` object is
429406
considered to be true if and only if it isn't equal to ``timedelta(0)``.
@@ -614,8 +591,13 @@ Supported operations:
614591
+-------------------------------+----------------------------------------------+
615592
| ``timedelta = date1 - date2`` | \(3) |
616593
+-------------------------------+----------------------------------------------+
617-
| ``date1 < date2`` | *date1* is considered less than *date2* when |
618-
| | *date1* precedes *date2* in time. (4) |
594+
| | ``date1 == date2`` | Equality comparison. (4) |
595+
| | ``date1 != date2`` | |
596+
+-------------------------------+----------------------------------------------+
597+
| | ``date1 < date2`` | Order comparison. (5) |
598+
| | ``date1 > date2`` | |
599+
| | ``date1 <= date2`` | |
600+
| | ``date1 >= date2`` | |
619601
+-------------------------------+----------------------------------------------+
620602

621603
Notes:
@@ -635,15 +617,12 @@ Notes:
635617
timedelta.microseconds are 0, and date2 + timedelta == date1 after.
636618

637619
(4)
620+
:class:`date` objects are equal if they represent the same date.
621+
622+
(5)
623+
*date1* is considered less than *date2* when *date1* precedes *date2* in time.
638624
In other words, ``date1 < date2`` if and only if ``date1.toordinal() <
639-
date2.toordinal()``. Date comparison raises :exc:`TypeError` if
640-
the other comparand isn't also a :class:`date` object. However,
641-
``NotImplemented`` is returned instead if the other comparand has a
642-
:attr:`~date.timetuple` attribute. This hook gives other kinds of date objects a
643-
chance at implementing mixed-type comparison. If not, when a :class:`date`
644-
object is compared to an object of a different type, :exc:`TypeError` is raised
645-
unless the comparison is ``==`` or ``!=``. The latter cases return
646-
:const:`False` or :const:`True`, respectively.
625+
date2.toordinal()``.
647626

648627
In Boolean contexts, all :class:`date` objects are considered to be true.
649628

@@ -1170,8 +1149,13 @@ Supported operations:
11701149
+---------------------------------------+--------------------------------+
11711150
| ``timedelta = datetime1 - datetime2`` | \(3) |
11721151
+---------------------------------------+--------------------------------+
1173-
| ``datetime1 < datetime2`` | Compares :class:`.datetime` to |
1174-
| | :class:`.datetime`. (4) |
1152+
| | ``datetime1 == datetime2`` | Equality comparison. (4) |
1153+
| | ``datetime1 != datetime2`` | |
1154+
+---------------------------------------+--------------------------------+
1155+
| | ``datetime1 < datetime2`` | Order comparison. (5) |
1156+
| | ``datetime1 > datetime2`` | |
1157+
| | ``datetime1 <= datetime2`` | |
1158+
| | ``datetime1 >= datetime2`` | |
11751159
+---------------------------------------+--------------------------------+
11761160

11771161
(1)
@@ -1199,40 +1183,41 @@ Supported operations:
11991183
are done in this case.
12001184

12011185
If both are aware and have different :attr:`~.datetime.tzinfo` attributes, ``a-b`` acts
1202-
as if *a* and *b* were first converted to naive UTC datetimes first. The
1186+
as if *a* and *b* were first converted to naive UTC datetimes. The
12031187
result is ``(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None)
12041188
- b.utcoffset())`` except that the implementation never overflows.
12051189

12061190
(4)
1191+
:class:`.datetime` objects are equal if they represent the same date
1192+
and time, taking into account the time zone.
1193+
1194+
Naive and aware :class:`!datetime` objects are never equal.
1195+
:class:`!datetime` objects are never equal to :class:`date` objects
1196+
that are not also :class:`!datetime` instances, even if they represent
1197+
the same date.
1198+
1199+
If both comparands are aware and have different :attr:`~.datetime.tzinfo`
1200+
attributes, the comparison acts as comparands were first converted to UTC
1201+
datetimes except that the implementation never overflows.
1202+
:class:`!datetime` instances in a repeated interval are never equal to
1203+
:class:`!datetime` instances in other time zone.
1204+
1205+
(5)
12071206
*datetime1* is considered less than *datetime2* when *datetime1* precedes
1208-
*datetime2* in time.
1207+
*datetime2* in time, taking into account the time zone.
12091208

1210-
If one comparand is naive and the other is aware, :exc:`TypeError`
1211-
is raised if an order comparison is attempted. For equality
1212-
comparisons, naive instances are never equal to aware instances.
1209+
Order comparison between naive and aware :class:`.datetime` objects,
1210+
as well as a :class:`!datetime` object and a :class:`!date` object
1211+
that is not also a :class:`!datetime` instance, raises :exc:`TypeError`.
12131212

1214-
If both comparands are aware, and have the same :attr:`~.datetime.tzinfo` attribute, the
1215-
common :attr:`~.datetime.tzinfo` attribute is ignored and the base datetimes are
1216-
compared. If both comparands are aware and have different :attr:`~.datetime.tzinfo`
1217-
attributes, the comparands are first adjusted by subtracting their UTC
1218-
offsets (obtained from ``self.utcoffset()``).
1213+
If both comparands are aware and have different :attr:`~.datetime.tzinfo`
1214+
attributes, the comparison acts as comparands were first converted to UTC
1215+
datetimes except that the implementation never overflows.
12191216

12201217
.. versionchanged:: 3.3
12211218
Equality comparisons between aware and naive :class:`.datetime`
12221219
instances don't raise :exc:`TypeError`.
12231220

1224-
.. note::
1225-
1226-
In order to stop comparison from falling back to the default scheme of comparing
1227-
object addresses, datetime comparison normally raises :exc:`TypeError` if the
1228-
other comparand isn't also a :class:`.datetime` object. However,
1229-
``NotImplemented`` is returned instead if the other comparand has a
1230-
:attr:`~.datetime.timetuple` attribute. This hook gives other kinds of date objects a
1231-
chance at implementing mixed-type comparison. If not, when a :class:`.datetime`
1232-
object is compared to an object of a different type, :exc:`TypeError` is raised
1233-
unless the comparison is ``==`` or ``!=``. The latter cases return
1234-
:const:`False` or :const:`True`, respectively.
1235-
12361221
Instance methods:
12371222

12381223
.. method:: datetime.date()
@@ -1766,21 +1751,18 @@ Instance attributes (read-only):
17661751

17671752
.. versionadded:: 3.6
17681753

1769-
:class:`.time` objects support comparison of :class:`.time` to :class:`.time`,
1770-
where *a* is considered less
1771-
than *b* when *a* precedes *b* in time. If one comparand is naive and the other
1772-
is aware, :exc:`TypeError` is raised if an order comparison is attempted. For equality
1773-
comparisons, naive instances are never equal to aware instances.
1754+
:class:`.time` objects support equality and order comparisons,
1755+
where *a* is considered less than *b* when *a* precedes *b* in time.
1756+
1757+
Naive and aware :class:`!time` objects are never equal.
1758+
Order comparison between naive and aware :class:`!time` objects raises
1759+
:exc:`TypeError`.
17741760

17751761
If both comparands are aware, and have
17761762
the same :attr:`~.time.tzinfo` attribute, the common :attr:`!tzinfo` attribute is
17771763
ignored and the base times are compared. If both comparands are aware and
17781764
have different :attr:`!tzinfo` attributes, the comparands are first adjusted by
1779-
subtracting their UTC offsets (obtained from ``self.utcoffset()``). In order
1780-
to stop mixed-type comparisons from falling back to the default comparison by
1781-
object address, when a :class:`.time` object is compared to an object of a
1782-
different type, :exc:`TypeError` is raised unless the comparison is ``==`` or
1783-
``!=``. The latter cases return :const:`False` or :const:`True`, respectively.
1765+
subtracting their UTC offsets (obtained from ``self.utcoffset()``).
17841766

17851767
.. versionchanged:: 3.3
17861768
Equality comparisons between aware and naive :class:`.time` instances

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.