Ruby的iso8601日期解析似乎破了

时间:2016-04-19 14:55:09

标签: ruby date iso8601

我正在从外部源(需要采用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]

1 个答案:

答案 0 :(得分:2)

根据docs

  

根据一些典型的ISO 8601格式从字符串中解析,创建一个新的Date对象。

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 ...>

不确定“典型的ISO 8601格式”是什么意思,因为应该只有一个。我不会说这是一个错误。

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