New submission from Paul Keating <pjakeat...@gmail.com>:

This was originally reported on StackOverflow (53829118) and I believe the 
poster has found a genuine issue. He reported a problem converting from Python 
2.3 to Python 2.7 in which strptime() produced a different result for %U in the 
two versions. For lack of an old enough copy of Python, I can not reproduce the 
Python 2.3 result, which he reports as follows:

Python 2.3.4
------------
>>> dw='51 0 18' # 51 week number, 0 for Sunday and 18 for year 2018
>>> date=time.strptime(dw,"%U %w %y")
>>> print date 
(2018, 12, 16, 0, 0, 0, 6, 350, -1) # 2018 12 16
[Remark: This output looks like Python 2.1 to me, but the issue is not the 
datatype of the result but the value of the result.]

Python 2.7.5
------------
>>> dw='51 0 18' # 51 week number, 0 for Sunday and 18 for year 2018
>>> date=time.strptime(dw,"%U %w %y")
>>> print date
time.struct_time(tm_year=2018, tm_mon=12, tm_mday=23, tm_hour=0, tm_min=0, 
tm_sec=0, tm_wday=6, tm_yday=357, tm_isdst=-1)

The point here is that the day of the month has shifted from 16 December to 23 
December, and I believe that 16 December is correct.

In ISO week numbers, week 51 in 2018 runs from Monday 17 to Sunday 23 December. 
So the Python 2.7.5 result is correct for ISO week numbers. Only, ISO week 
numbers are provided by directive %W. 

%U is supposed to work with the week numbering system common (as I understand 
it) in North America, where (according to Wikipedia) week 1 begins on a Sunday, 
and contains both 1 January and the first Saturday of the year. While I am not 
familiar with that system, Excel 2016 is, and it reports 

=WEEKNUM(DATE(2018,12,16))  as 51
=ISOWEEKNUM(DATE(2018,12,16))  as 50 

But if I do the following in Python (2.6, 2.7 or 3.5) I get the week numbers 
reported as the same:

>>> dw='51 0 18' # 51 week number, 0 for Sunday and 18 for year 2018
>>> time.strptime(dw,"%U %w %y") == time.strptime(dw,"%W %w %y")
True
[Should be False]

So directives %U and %W are producing the equal results for this date, and 
further checking shows that the same unexpected equality appears for all 
Sundays in 2018. And I get the same unexpected equality for the Sunday of the 
51st week of years 2063, 2057, 2052, 2046, 2035, 2027, 2007, 2001. It looks to 
recur when 1 January of a given year is a Monday. 

Now, it may be going too far to say that Excel is right and the Python standard 
library is wrong. It is clear that the algorithms are just systematically 
different. On the other hand, it appears that Python 2.3 did it the way that 
Excel does, and that raises the question of why Python does it differently now. 

A bit of searching reveals that people who complain that Excel's WEEKNUM 
function is wrong are generally just unaware that there are competing systems. 
So this difference is not in the same category as Excel's numbering of days 
before 1 March 1900.

----------
components: Library (Lib)
messages: 332135
nosy: Paul Keating
priority: normal
severity: normal
status: open
title: time.strptime() unexpectedly gives the same result for %U and %W for 2018
type: behavior
versions: Python 2.7, Python 3.5

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue35535>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to