[Python-checkins] peps: PEP 495: Rewrote Guidelines for New tzinfo Implementations.
alexander.belopolsky
python-checkins at python.org
Mon Sep 21 04:42:49 CEST 2015
https://hg.python.org/peps/rev/1fa865cbe398
changeset: 6082:1fa865cbe398
user: Alexander Belopolsky <alexander.belopolsky at gmail.com>
date: Sun Sep 20 22:42:43 2015 -0400
summary:
PEP 495: Rewrote Guidelines for New tzinfo Implementations.
files:
pep-0495.txt | 134 +++++++++++++++++++++++++-------------
1 files changed, 89 insertions(+), 45 deletions(-)
diff --git a/pep-0495.txt b/pep-0495.txt
--- a/pep-0495.txt
+++ b/pep-0495.txt
@@ -314,7 +314,7 @@
used anywhere in the stdlib because the only included ``tzinfo``
implementation (the ``datetime.timzeone`` class implementing fixed
offset timezones) override ``fromutc()``.
-
+
Guidelines for New tzinfo Implementations
=========================================
@@ -332,20 +332,102 @@
the ambiguous or missing times.
-In the DST Fold
----------------
+In the Fold
+-----------
New subclasses should override the base-class ``fromutc()`` method and
-implement it so that in all cases where two UTC times ``u1`` and
-``u2`` (``u1`` <``u2``) correspond to the same local time
-``fromutc(u1)`` will return an instance with ``fold=0`` and
-``fromutc(u2)`` will return an instance with ``fold=1``. In all
+implement it so that in all cases where two UTC times ``u0`` and
+``u1`` (``u0`` <``u1``) correspond to the same local time ``t``,
+``fromutc(u0)`` will return an instance with ``fold=0`` and
+``fromutc(u1)`` will return an instance with ``fold=1``. In all
other cases the returned instance should have ``fold=0``.
+The ``utcoffset()``, ``tzname()`` and ``dst()`` methods should use the
+value of the fold attribute to determine whether an otherwise
+ambiguous time ``t`` corresponds to the time before or after the
+transition. By definition, ``utcoffset()`` is greater before and
+smaller after any transition that creates a fold. The values returned
+by ``tzname()`` and ``dst()`` may or may not depend on the value of
+the fold attribute depending on the kind of the transition.
+
.. image:: pep-0495-fold-2.png
:align: center
:width: 60%
+The sketch above illustrates the relationship between the UTC and
+local time around a fall-back transition. The zig-zag line is a graph
+of the function implemented by ``fromutc()``. Two intervals on the
+UTC axis adjacent to the transition point and having the size of the
+time shift at the transition are mapped to the same interval on the
+local axis. New implementations of ``fromutc()`` method should set
+the fold attribute to 1 when ``self`` is in the region marked in
+yellow on the UTC axis. (All intervals should be treated as closed on
+the left and open on the right.)
+
+
+Mind the Gap
+------------
+
+The ``fromutc()`` method should never produce a time in the gap.
+
+If ``utcoffset()``, ``tzname()`` or ``dst()`` method is called on a
+local time that falls in a gap, the rules in effect before the
+transition should be used if ``fold=0``. Otherwise, the rules in
+effect after the transition should be used.
+
+.. image:: pep-0495-gap.png
+ :align: center
+ :width: 60%
+
+The sketch above illustrates the relationship between the UTC and
+local time around a spring-forward transition. At the transition, the
+local clock is advanced skipping the times in the gap. For the
+purposes of determining the values of ``utcoffset()``, ``tzname()``
+and ``dst()``, the line before the transition is extended forward to
+find the UTC time corresponding to the time in the gap with ``fold=0``
+and for instances with ``fold=1``, the line after the transition is
+extended back.
+
+Summary of Rules at a Transition
+--------------------------------
+
+On ambiguous/missing times ``utcoffset()`` should return values
+according to the following table:
+
++-----------------+----------------+-----------------------------+
+| | fold=0 | fold=1 |
++=================+================+=============================+
+| Fold | oldoff | newoff = oldoff - delta |
++-----------------+----------------+-----------------------------+
+| Gap | oldoff | newoff = oldoff + delta |
++-----------------+----------------+-----------------------------+
+
+where ``oldoff`` (``newoff``) is the UTC offset before (after) the
+transition and ``delta`` is the absolute size of the fold or the gap.
+
+Note that the interpretation of the fold attribute is consistent in
+the fold and gap cases. In both cases, ``fold=0`` (``fold=1``) means
+use ``fromutc()`` line before (after) the transition to find the UTC
+time. Only in the "Fold" case, the UTC times ``u0`` and ``u1`` are
+"real" solutions for the equation ``fromutc(u) == t``, while in the
+"Gap" case they are "imaginary" solutions.
+
+
+The DST Transitions
+-------------------
+
+On a missing time introduced at the start of DST, the values returned
+by ``utcoffset()`` and ``dst()`` methods should be as follows
+
++-----------------+----------------+------------------+
+| | fold=0 | fold=1 |
++=================+================+==================+
+| utcoffset() | stdoff | stdoff + dstoff |
++-----------------+----------------+------------------+
+| dst() | zero | dstoff |
++-----------------+----------------+------------------+
+
+
On an ambiguous time introduced at the end of DST, the values returned
by ``utcoffset()`` and ``dst()`` methods should be as follows
@@ -362,44 +444,6 @@
= timedelta(0)``.
-Mind the DST Gap
-----------------
-
-.. image:: pep-0495-gap.png
- :align: center
- :width: 60%
-
-On a missing time introduced at the start of DST, the values returned
-by ``utcoffset()`` and ``dst()`` methods should be as follows
-
-+-----------------+----------------+------------------+
-| | fold=0 | fold=1 |
-+=================+================+==================+
-| utcoffset() | stdoff | stdoff + dstoff |
-+-----------------+----------------+------------------+
-| dst() | zero | dstoff |
-+-----------------+----------------+------------------+
-
-
-Non-DST Folds and Gaps
-----------------------
-
-On ambiguous/missing times introduced by the change in the standard time
-offset, the ``dst()`` method should return the same value regardless of
-the value of ``fold`` and the ``utcoffset()`` should return values
-according to the following table:
-
-+-----------------+----------------+-----------------------------+
-| | fold=0 | fold=1 |
-+=================+================+=============================+
-| ambiguous | oldoff | newoff = oldoff - delta |
-+-----------------+----------------+-----------------------------+
-| missing | oldoff | newoff = oldoff + delta |
-+-----------------+----------------+-----------------------------+
-
-where ``delta`` is the size of the fold or the gap.
-
-
Temporal Arithmetic and Comparison Operators
============================================
--
Repository URL: https://hg.python.org/peps
More information about the Python-checkins
mailing list