From: Tadayoshi Funaba Date: 2003-08-30T18:01:54+09:00 Subject: [ruby-dev:21292] parsedate.rb and time.rb ふなばです。 parsedate に、年/月、という形式を解釈させることは、想定されていません でした。年月日のうち、日を省略する、ということは考えられていなかったの です。今現在、一部、受けつけられているように見えるのは、たまたまで、バ グなのかもしれません。 time.rb を見ると、使用例などに、年/月、という形式が挙げられているので すが、parsedate では、この形式は受けとらない、ということをより明確にし ていきたいと思っています。 選択肢としては、 1. やっぱり、parsedate.rb も time.rb も、このままにしておく。 2. parsedate.rb では改めるが、time.rb では独自に保証する。 3. parsedate.rb の改訂に time.rb もつきあう。 といったところでしょうか。どうするか相談しましょう。とくに意見はない、 ということであれば、僕の判断 (3) で直します。 以下、なにが問題か述べます。 ひとまず、曜日、時刻、タイムゾーンなどのことは置いておくとします。 parsedate が解釈する日付は、やはり、年月日が揃っているのが、基本です。 ただし、月が名前になっていて、年と月を並べたもの、"Aug 30" や "30 Aug" のようなものは、年を省略できます。また、MM/DD、MMDD もいいです。 スラッシュで区切る形式は、月/日[/年]、のように米国式に解釈されます。こ の形式は、ちょっと特殊だと思いますが、これは、僕が書き換える以前からの 仕様です (本当はちょっとイヤです。まるごと削りたくなります)。 年月日のうち、省略を許すとすれば、年です。どの形式でも、日付から月の日 を省略することは想定されていません。 "2003/08" のような入力が、一見ちゃんと解釈されているように見えるのは、 まず、年を省略された形式、月/日、として受け入れたあと、ひとつ目の要素 が、あきらかに月ではないと判断できるため、気をきかせて、(月/日/年の場 合と同じように) 年/月/日、として読み換えるからです (バグかもしれない)。 ですから、たとえば、"03/12" などは、03年12月とは、なりません。 今後は、月/日として受けつけたはずのものを年/月と読み換えることは、しな いつもりです。スラッシュで区切る形式は、parsedate のなかでも、もっとも 解釈の根拠が薄弱でもあり、これ以上の濫用を許すと、本当にわけがわからな くなりそうです。 parsedate の解釈について、それなりにちゃんと書こうとすると、長くなって、 うんざりされそうなので、今のところ、正規のマニュアルには、あまり詳しく は書いてませんが、もし、より詳しい説明を読みたければ、別の文書に、それ なりに詳しい説明があるので、それを読んでください。 http://www.funaba.org/date2/parsedate.html