Bug #14241
closedTime.strptime() doesn't support the directive "%W".
Description
According to reference manual, Time.strptime() accepts the directive "%W" in a format string, but it seems not to be worked.
On the other hand, Date.strptime() accepts "%W" correctly.
C:>ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]
C:>irb
irb(main):001:0> require "time"
=> true
irb(main):003:0> Time.strptime("2017 1", "%Y %W").strftime("%F")
=> "2017-01-01"
irb(main):004:0> Date.strptime("2017 1", "%Y %W").strftime("%F")
=> "2017-01-02"
Files
Updated by stsuboi (Sougo TSUBOI) almost 7 years ago
- Subject changed from Time.strptime() doesn't support the directive "%W" in . to Time.strptime() doesn't support the directive "%W".
Updated by Anonymous almost 7 years ago
To add to the report, the Time.strptime doesn't support any of the following directives
%w %W %j %u
basically, it doesn't support anything outputted from the Date._strptim that is not in the following hash keys
(https://github.com/ruby/ruby/blob/ruby_2_5/lib/time.rb#L448)
:year , :mon, :mday, :hour, :min, :sec, :sec_fraction, :zone
and the previous format directives produce various different keys like
:wnum1, :cwday, :wday, :yday
examples:
Date.strptime("2017 1 3", "%Y %W %u").strftime("%F")
=> "2017-01-04"
Time.strptime("2017 1 3", "%Y %W %u").strftime("%F")
=> "2017-01-01"
Date.strptime("2017 20", "%Y %j").strftime("%F")
=> "2017-01-20"
Time.strptime("2017 20", "%Y %j").strftime("%F")
=> "2017-01-01"
Updated by jeremyevans0 (Jeremy Evans) over 5 years ago
- File time-strptime-wnum.patch time-strptime-wnum.patch added
- Status changed from Open to Assigned
- Assignee set to akr (Akira Tanaka)
I agree this is a bug that should be fixed. Attached is a patch that implements support for %U/%W/%u/%w in Time#strptime
.
Updated by jeremyevans0 (Jeremy Evans) over 5 years ago
- Related to Bug #9836: Bad Implementation of Time.strptime added
Updated by jeremyevans0 (Jeremy Evans) over 5 years ago
Here's an updated patch that handles %V
, %g
, and %G
as well.
Updated by jeremyevans (Jeremy Evans) about 5 years ago
- Status changed from Assigned to Closed
Applied in changeset git|a9d4f2d03c847ec1c89dc03a5076a9fa29ffa61f.
Support %U/%u/%W/%w/%V/%g/%G formats in Time.strptime
Most of these formats were documented as supported, but were not
actually supported. Document that %g and %G are supported.
If %U/%W is specified without yday and mon/mday are not specified,
then Date.strptime is used to get the appropriate yday.
If cwyear is specifier without the year, or cwday and cweek are
specified without mday and mon, then use Date.strptime and convert
the resulting value to Time, since Time.make_time cannot handle
those conversions