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
。
我正在解析来自外部来源的日期(需要采用 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
。