2016-04-19 8 views
-1

私は外部ソースから日付を解析しています(iso8601形式である必要があります)。Rubyの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)> 

日付がiso8601形式ではないため、最後の2回の呼び出しで無効な引数の例外が発生することが予想されます。これはRubyのバグですか?

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

なぜ無効ですか? – sawa

+0

Rubyはどこでそれを壊そうとしているのかを知っていたかもしれません。 ;) – 13aal

+0

@sawa ISO-8601は4桁の年を必要とします –

答えて

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

「8601の形式は、一般的なISO」何を意味するのか本当にわからない、本当に1つしかなければなりませんよう。私はそれがバグだとは思わないでしょう。

厳密な解析が必要な場合は、Date#strptimeを参照してください。

+0

私はそれが「バグではない」ということにかなり同意していません。 RubyチームがDate.iso8601を実装するように任命した場合、 '2001-02-03'は2001年2月3日ですが、 '200-02-03'は2月3日2100であることを確認する2つの単体テストを記述しますか? –

関連する問題