Project

General

Profile

Bug #14241

Time.strptime() doesn't support the directive "%W".

Added by stsuboi (Sougo TSUBOI) over 1 year ago. Updated about 1 month ago.

Status:
Assigned
Priority:
Normal
Target version:
-
ruby -v:
ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]
[ruby-core:84478]

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

time-strptime-wnum.patch (1.89 KB) time-strptime-wnum.patch jeremyevans0 (Jeremy Evans), 06/21/2019 05:47 PM
time-strptime-wnum-cw-14241.patch (3.2 KB) time-strptime-wnum-cw-14241.patch jeremyevans0 (Jeremy Evans), 08/11/2019 07:31 PM

Related issues

Related to Ruby master - Bug #9836: Bad Implementation of Time.strptimeFeedbackActions

History

#1

Updated by stsuboi (Sougo TSUBOI) over 1 year ago

  • Description updated (diff)
#2

Updated by stsuboi (Sougo TSUBOI) over 1 year ago

  • Description updated (diff)
#3

Updated by stsuboi (Sougo TSUBOI) over 1 year ago

  • Description updated (diff)
#4

Updated by stsuboi (Sougo TSUBOI) over 1 year 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 over 1 year 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) 3 months ago

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.

#7

Updated by jeremyevans0 (Jeremy Evans) about 1 month ago

  • Related to Bug #9836: Bad Implementation of Time.strptime added

Updated by jeremyevans0 (Jeremy Evans) about 1 month ago

Here's an updated patch that handles %V, %g, and %G as well.

Also available in: Atom PDF