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