You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
As implemented in bpo-10827, use of 2-digits years in timetuples to mean 4-digit years straddling year 2000 is deprecated in 3.3. There is no mechanism for issuing deprecation warning for access to a module variable, but a deprecation note was added to its documentation.
Attached patch removes time.accept2dyear and the associated behaviors.
**Year 2000 (Y2K) issues**: Python depends on the platform's C library, which
generally doesn't have year 2000 issues, since all dates and times are
represented internally as seconds since the epoch. Function :func:`strptime`
can parse 2-digit years when given ``%y`` format code. When 2-digit years are
parsed, they are converted according to the POSIX and ISO C standards: values
69--99 are mapped to 1969--1999, and values 0--68 are mapped to 2000--2068.
.. class:: struct_time (...) A year value will be handled as described under :ref:`Year 2000 (Y2K) issues <time-y2kissues>` above.
.. [#] The use of ``%Z`` is now deprecated, but the ``%z`` escape that expands to the
preferred hour/minute offset is not supported by all ANSI C libraries. Also, a
strict reading of the original 1982 :rfc:`822` standard calls for a two-digit
year (%y rather than %Y), but practice moved to 4-digit years long before the
year 2000. The 4-digit year has been mandated by :rfc:`2822`, which obsoletes
:rfc:`822`.
Are these 3 notes still valid? It looks like struct_time note is wrong: the year 70 is now 70 and not interpreted as 1970 anymore.
---
timemodule.c:
PyDoc_STRVAR(module_doc,
"...
The tuple items are:\n\
year (four digits, e.g. 1998)\n\
...")
/home/haypo/prog/HG/cpython/Modules/timemodule.c: In function 'PyInit_time':
/home/haypo/prog/HG/cpython/Modules/timemodule.c:872: warning: unused variable 'p'
This is wrong regardless of this patch. I don't mind fixing this,
but it would be a different issue. Can you suggest a change? I would
like the docstring to still inform the user that 1998 should be given
as 1998 and not as 98. Maybe s/four/all/?
On Tue, Apr 26, 2011 at 6:30 PM, STINNER Victor <report@bugs.python.org> wrote:
>
> STINNER Victor <victor.stinner@haypocalc.com> added the comment:
>
> "What makes you say so?
>
> 1970"
>
> Don't write ">>> " using the email interface :-)
>
Sorry. That was the output of time.strptime('70', '%y')[0].
On Tue, Apr 26, 2011 at 6:09 PM, STINNER Victor <report@bugs.python.org> wrote:
..
>
> timemodule.c:
>
> PyDoc_STRVAR(module_doc,
> "...
> The tuple items are:\n\
> year (four digits, e.g. 1998)\n\
> ...")
>
> => That's wrong. Example: time.gmtime(-55582200000).tm_year gives 208.
This is wrong regardless of this patch. I don't mind fixing this,
but it would be a different issue. Can you suggest a change? I would
like the docstring to still inform the user that 1998 should be given
as 1998 and not as 98. Maybe s/four/all/?
Activity
abalkin commentedon Apr 26, 2011
As implemented in bpo-10827, use of 2-digits years in timetuples to mean 4-digit years straddling year 2000 is deprecated in 3.3. There is no mechanism for issuing deprecation warning for access to a module variable, but a deprecation note was added to its documentation.
Attached patch removes time.accept2dyear and the associated behaviors.
vstinner commentedon Apr 26, 2011
time.rst:
generally doesn't have year 2000 issues, since all dates and times are
represented internally as seconds since the epoch. Function :func:`strptime`
can parse 2-digit years when given ``%y`` format code. When 2-digit years are
parsed, they are converted according to the POSIX and ISO C standards: values
69--99 are mapped to 1969--1999, and values 0--68 are mapped to 2000--2068.
.. class:: struct_time (...) A year value will be handled as described under :ref:`Year 2000 (Y2K) issues <time-y2kissues>` above.
.. [#] The use of ``%Z`` is now deprecated, but the ``%z`` escape that expands to the
preferred hour/minute offset is not supported by all ANSI C libraries. Also, a
strict reading of the original 1982 :rfc:`822` standard calls for a two-digit
year (%y rather than %Y), but practice moved to 4-digit years long before the
year 2000. The 4-digit year has been mandated by :rfc:`2822`, which obsoletes
:rfc:`822`.
Are these 3 notes still valid? It looks like struct_time note is wrong: the year 70 is now 70 and not interpreted as 1970 anymore.
---
timemodule.c:
PyDoc_STRVAR(module_doc,
"...
The tuple items are:\n\
year (four digits, e.g. 1998)\n\
...")
=> That's wrong. Example: time.gmtime(-55582200000).tm_year gives 208.
---
/home/haypo/prog/HG/cpython/Modules/timemodule.c: In function 'PyInit_time':
/home/haypo/prog/HG/cpython/Modules/timemodule.c:872: warning: unused variable 'p'
abalkin commentedon Apr 26, 2011
On Tue, Apr 26, 2011 at 6:09 PM, STINNER Victor <report@bugs.python.org> wrote:
What makes you say so?
1970
abalkin commentedon Apr 26, 2011
On Tue, Apr 26, 2011 at 6:09 PM, STINNER Victor <report@bugs.python.org> wrote:
..
This is wrong regardless of this patch. I don't mind fixing this,
but it would be a different issue. Can you suggest a change? I would
like the docstring to still inform the user that 1998 should be given
as 1998 and not as 98. Maybe s/four/all/?
vstinner commentedon Apr 26, 2011
"What makes you say so?
1970"
--
Year 70 is considered as the year 70.
abalkin commentedon Apr 26, 2011
Sorry. That was the output of time.strptime('70', '%y')[0].
abalkin commentedon Apr 26, 2011
On Tue, Apr 26, 2011 at 6:09 PM, STINNER Victor <report@bugs.python.org> wrote:
..
This one needs to be removed. Thanks.
vstinner commentedon Apr 26, 2011
The next step is to update the datetime module: something like the attached patch (datetime_y2k.patch).
vstinner commentedon May 1, 2011
Le mardi 26 avril 2011 à 22:20 +0000, Alexander Belopolsky a écrit :
"year (e.g. 1998)\n" is enough.
python-dev commentedon May 2, 2011
New changeset e6f6ac8c2502 by Alexander Belopolsky in branch 'default':
Issue bpo-11930: Remove deprecated time.accept2dyear.
http://hg.python.org/cpython/rev/e6f6ac8c2502
python-dev commentedon May 2, 2011
New changeset db2ac3dc6cc2 by Alexander Belopolsky in branch 'default':
Issue bpo-11930: Remove year >= 1000 limitation from datetime.strftime.
http://hg.python.org/cpython/rev/db2ac3dc6cc2
python-dev commentedon May 2, 2011
New changeset bfd741162741 by Alexander Belopolsky in branch 'default':
Issue bpo-11930: Added Misc/NEWS and versionchanged entries.
http://hg.python.org/cpython/rev/bfd741162741
vstinner commentedon May 2, 2011
Great!