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 08133e4

Browse filesBrowse files
[3.11] gh-114728: Fix documentation for comparison of objects in datetime module (GH-114749) (GH-114929)
(cherry picked from commit c12240e) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
1 parent e995c58 commit 08133e4
Copy full SHA for 08133e4

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

@@ -1159,8 +1138,13 @@ Supported operations:
11591138
+---------------------------------------+--------------------------------+
11601139
| ``timedelta = datetime1 - datetime2`` | \(3) |
11611140
+---------------------------------------+--------------------------------+
1162-
| ``datetime1 < datetime2`` | Compares :class:`.datetime` to |
1163-
| | :class:`.datetime`. (4) |
1141+
| | ``datetime1 == datetime2`` | Equality comparison. (4) |
1142+
| | ``datetime1 != datetime2`` | |
1143+
+---------------------------------------+--------------------------------+
1144+
| | ``datetime1 < datetime2`` | Order comparison. (5) |
1145+
| | ``datetime1 > datetime2`` | |
1146+
| | ``datetime1 <= datetime2`` | |
1147+
| | ``datetime1 >= datetime2`` | |
11641148
+---------------------------------------+--------------------------------+
11651149

11661150
(1)
@@ -1188,40 +1172,41 @@ Supported operations:
11881172
are done in this case.
11891173

11901174
If both are aware and have different :attr:`~.datetime.tzinfo` attributes, ``a-b`` acts
1191-
as if *a* and *b* were first converted to naive UTC datetimes first. The
1175+
as if *a* and *b* were first converted to naive UTC datetimes. The
11921176
result is ``(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None)
11931177
- b.utcoffset())`` except that the implementation never overflows.
11941178

11951179
(4)
1180+
:class:`.datetime` objects are equal if they represent the same date
1181+
and time, taking into account the time zone.
1182+
1183+
Naive and aware :class:`!datetime` objects are never equal.
1184+
:class:`!datetime` objects are never equal to :class:`date` objects
1185+
that are not also :class:`!datetime` instances, even if they represent
1186+
the same date.
1187+
1188+
If both comparands are aware and have different :attr:`~.datetime.tzinfo`
1189+
attributes, the comparison acts as comparands were first converted to UTC
1190+
datetimes except that the implementation never overflows.
1191+
:class:`!datetime` instances in a repeated interval are never equal to
1192+
:class:`!datetime` instances in other time zone.
1193+
1194+
(5)
11961195
*datetime1* is considered less than *datetime2* when *datetime1* precedes
1197-
*datetime2* in time.
1196+
*datetime2* in time, taking into account the time zone.
11981197

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

1203-
If both comparands are aware, and have the same :attr:`~.datetime.tzinfo` attribute, the
1204-
common :attr:`~.datetime.tzinfo` attribute is ignored and the base datetimes are
1205-
compared. If both comparands are aware and have different :attr:`~.datetime.tzinfo`
1206-
attributes, the comparands are first adjusted by subtracting their UTC
1207-
offsets (obtained from ``self.utcoffset()``).
1202+
If both comparands are aware and have different :attr:`~.datetime.tzinfo`
1203+
attributes, the comparison acts as comparands were first converted to UTC
1204+
datetimes except that the implementation never overflows.
12081205

12091206
.. versionchanged:: 3.3
12101207
Equality comparisons between aware and naive :class:`.datetime`
12111208
instances don't raise :exc:`TypeError`.
12121209

1213-
.. note::
1214-
1215-
In order to stop comparison from falling back to the default scheme of comparing
1216-
object addresses, datetime comparison normally raises :exc:`TypeError` if the
1217-
other comparand isn't also a :class:`.datetime` object. However,
1218-
``NotImplemented`` is returned instead if the other comparand has a
1219-
:attr:`~.datetime.timetuple` attribute. This hook gives other kinds of date objects a
1220-
chance at implementing mixed-type comparison. If not, when a :class:`.datetime`
1221-
object is compared to an object of a different type, :exc:`TypeError` is raised
1222-
unless the comparison is ``==`` or ``!=``. The latter cases return
1223-
:const:`False` or :const:`True`, respectively.
1224-
12251210
Instance methods:
12261211

12271212
.. method:: datetime.date()
@@ -1752,21 +1737,18 @@ Instance attributes (read-only):
17521737

17531738
.. versionadded:: 3.6
17541739

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

17611747
If both comparands are aware, and have
17621748
the same :attr:`~.time.tzinfo` attribute, the common :attr:`!tzinfo` attribute is
17631749
ignored and the base times are compared. If both comparands are aware and
17641750
have different :attr:`!tzinfo` attributes, the comparands are first adjusted by
1765-
subtracting their UTC offsets (obtained from ``self.utcoffset()``). In order
1766-
to stop mixed-type comparisons from falling back to the default comparison by
1767-
object address, when a :class:`.time` object is compared to an object of a
1768-
different type, :exc:`TypeError` is raised unless the comparison is ``==`` or
1769-
``!=``. The latter cases return :const:`False` or :const:`True`, respectively.
1751+
subtracting their UTC offsets (obtained from ``self.utcoffset()``).
17701752

17711753
.. versionchanged:: 3.3
17721754
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.