@@ -400,30 +400,7 @@ objects (see below).
400
400
the :func: `divmod ` function. True division and multiplication of a
401
401
:class: `timedelta ` object by a :class: `float ` object are now supported.
402
402
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.
427
404
428
405
In Boolean contexts, a :class: `timedelta ` object is
429
406
considered to be true if and only if it isn't equal to ``timedelta(0) ``.
@@ -614,8 +591,13 @@ Supported operations:
614
591
+-------------------------------+----------------------------------------------+
615
592
| ``timedelta = date1 - date2 `` | \( 3) |
616
593
+-------------------------------+----------------------------------------------+
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 `` | |
619
601
+-------------------------------+----------------------------------------------+
620
602
621
603
Notes:
@@ -635,15 +617,12 @@ Notes:
635
617
timedelta.microseconds are 0, and date2 + timedelta == date1 after.
636
618
637
619
(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.
638
624
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() ``.
647
626
648
627
In Boolean contexts, all :class: `date ` objects are considered to be true.
649
628
@@ -1170,8 +1149,13 @@ Supported operations:
1170
1149
+---------------------------------------+--------------------------------+
1171
1150
| ``timedelta = datetime1 - datetime2 `` | \( 3) |
1172
1151
+---------------------------------------+--------------------------------+
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 `` | |
1175
1159
+---------------------------------------+--------------------------------+
1176
1160
1177
1161
(1)
@@ -1199,40 +1183,41 @@ Supported operations:
1199
1183
are done in this case.
1200
1184
1201
1185
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
1203
1187
result is ``(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None)
1204
1188
- b.utcoffset()) `` except that the implementation never overflows.
1205
1189
1206
1190
(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)
1207
1206
*datetime1 * is considered less than *datetime2 * when *datetime1 * precedes
1208
- *datetime2 * in time.
1207
+ *datetime2 * in time, taking into account the time zone .
1209
1208
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 ` .
1213
1212
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.
1219
1216
1220
1217
.. versionchanged :: 3.3
1221
1218
Equality comparisons between aware and naive :class: `.datetime `
1222
1219
instances don't raise :exc: `TypeError `.
1223
1220
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
-
1236
1221
Instance methods:
1237
1222
1238
1223
.. method :: datetime.date()
@@ -1766,21 +1751,18 @@ Instance attributes (read-only):
1766
1751
1767
1752
.. versionadded :: 3.6
1768
1753
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 `.
1774
1760
1775
1761
If both comparands are aware, and have
1776
1762
the same :attr: `~.time.tzinfo ` attribute, the common :attr: `!tzinfo ` attribute is
1777
1763
ignored and the base times are compared. If both comparands are aware and
1778
1764
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() ``).
1784
1766
1785
1767
.. versionchanged :: 3.3
1786
1768
Equality comparisons between aware and naive :class: `.time ` instances
0 commit comments