[ruby-core:94283] [Ruby master Bug#9836] Bad Implementation of Time.strptime
From:
merch-redmine@...
Date:
2019-08-11 19:36:42 UTC
List:
ruby-core #94283
Issue #9836 has been updated by jeremyevans0 (Jeremy Evans).
File time-strptime.patch added
I tried updating the patch to apply to the master branch (it is attached). It doesn't appear to handle `%W` correctly:
```ruby
str = Time.local(2019, 1, 30).strftime('%w %W %Y')
# => "3 04 2019"
Date.strptime(str, '%w %W %Y')
# => #<Date: 2019-01-30 ((2458514j,0s,0n),+0s,2299161j)>
Time.strptime(str, '%w %W %Y')
# => 2019-01-31 00:00:00 -0800
```
I think the approach I'm proposing in #14241 is simpler, by leaving the calculation to `Date.strptime`.
----------------------------------------
Bug #9836: Bad Implementation of Time.strptime
https://bugs.ruby-lang.org/issues/9836#change-80612
* Author: silverhammermba (Max Anselm)
* Status: Feedback
* Priority: Normal
* Assignee:
* Target version:
* ruby -v: ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
According to the documentation, `Time.strptime` "parses +date+ using `Date._strptime` and converts it to a Time object." However this conversion is extremely naive, using only certain fields return by `Date._strptime` and ignoring the rest (for example `:wnum0`).
This creates confusing and inconsistent behavior when compared to `Date` and `DateTime`'s `strptime` methods.
For example:
```
puts Date.strptime('201418', "%Y%U")
=> 2014-05-04
puts DateTime.strptime('201418', "%Y%U")
=> 2014-05-04T00:00:00+00:00
puts Time.strptime('201418', "%Y%U")
=> 2014-01-01 00:00:00 -0500
```
---Files--------------------------------
time-strptime.patch (2.05 KB)
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>