mirror of https://github.com/python/cpython
#14766: Add correct algorithm for when a 'time' object is naive.
This patch also clarifies the definition of Naive and Aware. Original patch by Greg Weller, I modified the first hunk somewhat to make the exposition even clearer (I hope).
This commit is contained in:
parent
b90252ed17
commit
089d4d4f7c
|
@ -17,16 +17,23 @@ focus of the implementation is on efficient attribute extraction for output
|
||||||
formatting and manipulation. For related
|
formatting and manipulation. For related
|
||||||
functionality, see also the :mod:`time` and :mod:`calendar` modules.
|
functionality, see also the :mod:`time` and :mod:`calendar` modules.
|
||||||
|
|
||||||
There are two kinds of date and time objects: "naive" and "aware". This
|
There are two kinds of date and time objects: "naive" and "aware".
|
||||||
distinction refers to whether the object has any notion of time zone, daylight
|
|
||||||
saving time, or other kind of algorithmic or political time adjustment. Whether
|
An aware object has sufficient knowledge of applicable algorithmic and
|
||||||
a naive :class:`.datetime` object represents Coordinated Universal Time (UTC),
|
political time adjustments, such as time zone and daylight saving time
|
||||||
|
information, to locate itself relative to other aware objects. An aware object
|
||||||
|
is used to represent a specific moment in time that is not open to
|
||||||
|
interpretation [#]_.
|
||||||
|
|
||||||
|
+A naive object does not contain enough information to unambiguously locate
|
||||||
|
+itself relative to other date/time objects. Whether
|
||||||
|
a naive object represents Coordinated Universal Time (UTC),
|
||||||
local time, or time in some other timezone is purely up to the program, just
|
local time, or time in some other timezone is purely up to the program, just
|
||||||
like it's up to the program whether a particular number represents metres,
|
like it's up to the program whether a particular number represents metres,
|
||||||
miles, or mass. Naive :class:`.datetime` objects are easy to understand and to
|
miles, or mass. Naive objects are easy to understand and to
|
||||||
work with, at the cost of ignoring some aspects of reality.
|
work with, at the cost of ignoring some aspects of reality.
|
||||||
|
|
||||||
For applications requiring more, :class:`.datetime` and :class:`.time` objects
|
For applications requiring aware objects, :class:`.datetime` and :class:`.time` objects
|
||||||
have an optional time zone information attribute, :attr:`tzinfo`, that can be
|
have an optional time zone information attribute, :attr:`tzinfo`, that can be
|
||||||
set to an instance of a subclass of the abstract :class:`tzinfo` class. These
|
set to an instance of a subclass of the abstract :class:`tzinfo` class. These
|
||||||
:class:`tzinfo` objects capture information about the offset from UTC time, the
|
:class:`tzinfo` objects capture information about the offset from UTC time, the
|
||||||
|
@ -105,10 +112,13 @@ Objects of these types are immutable.
|
||||||
|
|
||||||
Objects of the :class:`date` type are always naive.
|
Objects of the :class:`date` type are always naive.
|
||||||
|
|
||||||
An object *d* of type :class:`.time` or :class:`.datetime` may be naive or aware.
|
An object of type :class:`.time` or :class:`.datetime` may be naive or aware.
|
||||||
*d* is aware if ``d.tzinfo`` is not ``None`` and ``d.tzinfo.utcoffset(d)`` does
|
A :class:`.datetime` object *d* is aware if ``d.tzinfo`` is not ``None`` and
|
||||||
not return ``None``. If ``d.tzinfo`` is ``None``, or if ``d.tzinfo`` is not
|
``d.tzinfo.utcoffset(d)`` does not return ``None``. If ``d.tzinfo`` is
|
||||||
``None`` but ``d.tzinfo.utcoffset(d)`` returns ``None``, *d* is naive.
|
``None``, or if ``d.tzinfo`` is not ``None`` but ``d.tzinfo.utcoffset(d)``
|
||||||
|
returns ``None``, *d* is naive. A :class:`.time` object *t* is aware
|
||||||
|
if ``t.tzinfo`` is not ``None`` and ``t.tzinfo.utcoffset(None)`` does not return
|
||||||
|
``None``. Otherwise, *t* is naive.
|
||||||
|
|
||||||
The distinction between naive and aware doesn't apply to :class:`timedelta`
|
The distinction between naive and aware doesn't apply to :class:`timedelta`
|
||||||
objects.
|
objects.
|
||||||
|
@ -1707,3 +1717,8 @@ Notes:
|
||||||
(5)
|
(5)
|
||||||
For example, if :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``,
|
For example, if :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``,
|
||||||
``%z`` is replaced with the string ``'-0330'``.
|
``%z`` is replaced with the string ``'-0330'``.
|
||||||
|
|
||||||
|
|
||||||
|
.. rubric:: Footnotes
|
||||||
|
|
||||||
|
.. [#] If, that is, we ignore the effects of Relativity
|
||||||
|
|
Loading…
Reference in New Issue