[ruby-core:93394] [Ruby trunk Bug#11984] DateTime.parse can parse invalid datetime string
From:
merch-redmine@...
Date:
2019-06-27 22:45:43 UTC
List:
ruby-core #93394
Issue #11984 has been updated by jeremyevans0 (Jeremy Evans).
Status changed from Open to Rejected
This isn't a bug. `DateTime.parse` assume the string you are passing in has some date related information in it, and tries the best it can to find something. In this case, it guesses that the first four digits are the year and the last three are the day of the year. The non-digits in this case are ignored.
```ruby
DateTime._parse('fg4534253dd')
# => {:year=>4534, :yday=>253}
DateTime._parse('4534253')
# => {:year=>4534, :yday=>253}
```
----------------------------------------
Bug #11984: DateTime.parse can parse invalid datetime string
https://bugs.ruby-lang.org/issues/11984#change-78930
* Author: lanscene (jarry xu)
* Status: Rejected
* Priority: Normal
* Assignee:
* Target version:
* ruby -v: ruby 2.2.4p230 (2015-12-16 revision 53155) [x86_64-linux] and ruby 2.0.0p645 (2015-04-13 revision 50299) [universal.x86_64-darwin15]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
It seems if you pass a string which begins with 2 alphabets and following is 7 numerics, it can be parsed as DateTime, as follows
irb(main):002:0> require 'time'
irb(main):008:0> dt0 = DateTime.parse('fg4534253dd')
=> #<DateTime: 4534-09-10T00:00:00+00:00 ((3377322j,0s,0n),+0s,2299161j)>
irb(main):009:0> dt0 = DateTime.parse('fg4534253')
=> #<DateTime: 4534-09-10T00:00:00+00:00 ((3377322j,0s,0n),+0s,2299161j)>
irb(main):010:0> DateTime.parse('gg1233234')
=> #<DateTime: 1233-08-22T00:00:00+00:00 ((2171645j,0s,0n),+0s,2299161j)>
irb(main):011:0> DateTime.parse('gg1233234dd')
=> #<DateTime: 1233-08-22T00:00:00+00:00 ((2171645j,0s,0n),+0s,2299161j)>
--
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>