classification
Title: time.strptime does not properly convert out-of-bounds values
Type: behavior Stage: resolved
Components: Library (Lib) Versions: Python 3.6, Python 3.5, Python 2.7
process
Status: closed Resolution: duplicate
Dependencies: Superseder: strptime() can produce invalid date with negative year day
View: 23718
Assigned To: Nosy List: abarry, beng94, iaslan, ned.deily
Priority: normal Keywords:

Created on 2016-02-03 16:02 by iaslan, last changed 2016-02-12 05:21 by ned.deily. This issue is now closed.

Messages (4)
msg259488 - (view) Author: Ioannis Aslanidis (iaslan) Date: 2016-02-03 16:02
There seems to be a bug in the time library when performing the following conversion:

"""
In [8]: mytime=time.strptime(str([2015, 53, 0]), '[%Y, %U, %w]')

In [9]: mytime
Out[9]: time.struct_time(tm_year=2016, tm_mon=1, tm_mday=3, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=368, tm_isdst=-1)

In [10]: time.strftime('%Y %U', mytime)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-10-c13538c08ea5> in <module>()
----> 1 time.strftime('%Y %U', mytime)

ValueError: day of year out of range 
"""

As you can observe, tm_yday got a value of 368 instead of 3. It seems that the C function is not properly subtracting 365 or 366 days when converting from week 53 of a particular year which, according to ISO 8601 [1] and per python documentation [2]. Documentation explicitly says that: "The first week of the year is the week with the year's first Thursday in it".

[1] https://en.wikipedia.org/wiki/ISO_8601#Week_dates
[2] https://docs.python.org/2/library/time.html
msg259957 - (view) Author: Tamás Bence Gedai (beng94) * Date: 2016-02-09 22:19
This is connected to http://bugs.python.org/issue23718

I submitted a patch that hopefully solves this problem.
msg260165 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2016-02-12 05:19
Thanks for the report.  Closing this issue as a duplicate of Issue23719.
msg260166 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2016-02-12 05:21
Make that Issue23718
History
Date User Action Args
2016-02-12 05:21:10ned.deilysetsuperseder: PEP 475: port test_eintr to Windows -> strptime() can produce invalid date with negative year day
messages: + msg260166
2016-02-12 05:19:15ned.deilysetstatus: open -> closed

superseder: PEP 475: port test_eintr to Windows

nosy: + ned.deily
messages: + msg260165
resolution: duplicate
stage: resolved
2016-02-09 22:19:16beng94setnosy: + beng94
messages: + msg259957
2016-02-03 16:13:43abarrysetnosy: + abarry
title: Possible bug in time library -> time.strptime does not properly convert out-of-bounds values

versions: - Python 3.2, Python 3.3, Python 3.4
2016-02-03 16:02:51iaslancreate