@@ -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
@@ -1159,8 +1138,13 @@ Supported operations:
1159
1138
+---------------------------------------+--------------------------------+
1160
1139
| ``timedelta = datetime1 - datetime2 `` | \( 3) |
1161
1140
+---------------------------------------+--------------------------------+
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 `` | |
1164
1148
+---------------------------------------+--------------------------------+
1165
1149
1166
1150
(1)
@@ -1188,40 +1172,41 @@ Supported operations:
1188
1172
are done in this case.
1189
1173
1190
1174
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
1192
1176
result is ``(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None)
1193
1177
- b.utcoffset()) `` except that the implementation never overflows.
1194
1178
1195
1179
(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)
1196
1195
*datetime1 * is considered less than *datetime2 * when *datetime1 * precedes
1197
- *datetime2 * in time.
1196
+ *datetime2 * in time, taking into account the time zone .
1198
1197
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 ` .
1202
1201
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.
1208
1205
1209
1206
.. versionchanged :: 3.3
1210
1207
Equality comparisons between aware and naive :class: `.datetime `
1211
1208
instances don't raise :exc: `TypeError `.
1212
1209
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
-
1225
1210
Instance methods:
1226
1211
1227
1212
.. method :: datetime.date()
@@ -1752,21 +1737,18 @@ Instance attributes (read-only):
1752
1737
1753
1738
.. versionadded :: 3.6
1754
1739
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 `.
1760
1746
1761
1747
If both comparands are aware, and have
1762
1748
the same :attr: `~.time.tzinfo ` attribute, the common :attr: `!tzinfo ` attribute is
1763
1749
ignored and the base times are compared. If both comparands are aware and
1764
1750
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() ``).
1770
1752
1771
1753
.. versionchanged :: 3.3
1772
1754
Equality comparisons between aware and naive :class: `.time ` instances
0 commit comments