Ruby 的 iso8601 日期解析似乎已损坏

Ruby's Parsing of iso8601 dates seems broken

我正在解析来自外部来源的日期(需要采用 iso8601 格式)并且 运行 进入一个奇怪的场景。

require 'date'
Date.iso8601('2000-05-01') #<Date: 2000-05-01 ((2451666j,0s,0n),+0s,2299161j)> 
Date.iso8601('200-05-01')  #<Date: 2100-05-01 ((2488190j,0s,0n),+0s,2299161j)> 
Date.iso8601('20-05-01')   #<Date: 2020-05-01 ((2458971j,0s,0n),+0s,2299161j)> 

我预计最后 2 次调用会因无效参数异常而崩溃,因为日期不是 iso8601 格式。这是 Ruby 中的错误吗?

ruby --version
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin14]

根据 docs:

Creates a new Date object by parsing from a string according to some typical ISO 8601 formats.

Date.iso8601('2001-02-03')        #=> #<Date: 2001-02-03 ...>
Date.iso8601('20010203')          #=> #<Date: 2001-02-03 ...>
Date.iso8601('2001-W05-6')        #=> #<Date: 2001-02-03 ...>

不太确定 "typical ISO 8601 formats" 是什么意思,因为实际上应该只有一个。不过我不会说这是一个错误。

如果你想要严格解析,那么我会看一下 Date#strptime