@@ -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
428405In Boolean contexts, a :class: `timedelta ` object is
429406considered 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
621603Notes:
@@ -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
648627In 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-
12361221Instance 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
17751761If both comparands are aware, and have
17761762the same :attr: `~.time.tzinfo ` attribute, the common :attr: `!tzinfo ` attribute is
17771763ignored and the base times are compared. If both comparands are aware and
17781764have 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