Forum: Ruby-core Date and DateTime strptime and strftime not supporting proper Week Numbering for Monday vs Sunday as

365f114d7010e905f4b47865da4d0d1e?d=identicon&s=25 unknown (Guest)
on 2014-04-21 19:04
(Received via mailing list)
Issue #9764 has been updated by Steve R.


@Tadayoshi funaba,

I think i understand part of the issue now related to some of the
confusion.

Date.Comercial() allows you to provide the Year and Week number to get a
date.  It was the expectation that `puts Date.strptime('2014 00', '%Y
%U' )` would generate the same value as .Comercial but with Sunday as
the first day of Week.

Is there a way to support .Commercial input arguments with a Sunday
first day or week?

The use case is that many systems will return a %U style 0-53 week time
grouping (group results by week number).  The system returns a Week
Number integer and a Year integer.  You want to convert this into a date
for sorting and other benefits, but you do not know the day number.

----------------------------------------
Bug #9764: Date and DateTime strptime and strftime not supporting proper
Week Numbering for Monday vs Sunday as start day and %G causes ignore of
all other format arguments
https://bugs.ruby-lang.org/issues/9764#change-46279

* Author: Steve R
* Status: Rejected
* Priority: Low
* Assignee: tadayoshi funaba
* Category:
* Target version:
* ruby -v: ruby 2.0.0p247 (2013-06-27 revision 41674)
[x86_64-darwin12.4.0]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
Date and DateTime strftime and strptime are not supporting %U (0-53 Week
Numbers as defined in strptime):
http://www.ruby-doc.org/stdlib-2.1.1/libdoc/date/r...

Some examples that are not producing expected results/output:

1. require 'date'; puts Date.new(2013,12,30).strftime("%G %U")  # 2014
52  -- How is this Week 52 of 2013??

2. require 'date'; puts Date.strptime("2014 01","%G %U")  # 2013-12-30
-- This should really be 2013-12-29 as the 29th is the sunday and the
30th is the Monday, and %U should be using Sunday as the first day of
week.

3. The following three examples all produce the same result but really
should not.  Even if you change the week number to any number it still
stays at the same output/result.  It seems like there is a bug related
to %G that ignores all other commands:

puts Date.strptime('00 2014', '%U %G')  # 2013-12-30
puts Date.strptime('00 2014', '%W %G')  # 2013-12-30
puts Date.strptime('2014W011', '%GW%V%u')  # 2013-12-30


Additionally one would expect the following two lines to produce the
same results:
puts Date.strptime('00 2014', '%W %G')  # 2013-12-30
puts Date.strptime('00 2014', '%W %Y')  # Invalid Date Argument
This topic is locked and can not be replied to.