まつもと ゆきひろです

In message "[ruby-list:6405] Re: parsedate (Re: ruby 1.1b7 released)"
    on 98/02/13, Tadayoshi Funaba <tadf / kt.rim.or.jp> writes:

|ふなばです。
|
|最初の正規表現、ISO 8601 ? のところはまつもとさんのお任せします :-)
|# ISO 8601 は別枠にするつもりだと思ってました。

いや,こんなの簡単じゃん,なんて思ったのが間違いの元でした.
パッチ出します.

|で、その余計者ですが、 date (1) に対応したつもりだったので、付けたした
|のです。それは "Tue Jul  3 01:02:03 MET DST 1997" というものに対応する
|ものだったのです。

こういうフォーマットってあるんですね.無知.

|ところで、"Sept 20, 98" が 西暦98年なのか、 西暦2098年なのか、それはお
|そらく lib/parsedate.rb   にはわからないことなのです。 だから、 そこは
|lib/parsedate.rb を使うひとが考えることにしたいと思います。同じように、
|タイムゾーンの解釈もないわけですが、これは手抜きかもしれません。

まあ,タイムゾーンを解釈しないのは許せる妥協だとして,98年問
題はちょっと考えないといけませんね.いや,最初に考えなかった
私がいけないんですけど.

というのもUNIXのtm構造体がyearは「西暦−1900」という定義を採
用しているので,rubyもTimeクラスなどで基本的にそれを踏襲して
います.以前のparsedateはその辺をほんの少し意識していました
が,今後はそことの関係をどうするか決めておかないといけません
ね.まあ,選択肢は

  * Timeクラスの年表示を西暦にする
  * parsedateとtmの表示は無関係と宣言する
  * parsedateも(適当に推測した西暦から)-1900した値を返す

くらいしかないんですが.Dateの方は西暦を使ってますし,推測は
ろくでもないものになりそうですから,最後のものはあまりよくな
いような気もしますが.
                                まつもと ゆきひろ /:|)

--- parsedate.rb	1998/02/03 10:02:57	1.1.1.1.4.2
+++ parsedate.rb	1998/02/13 10:05:28
@@ -13,3 +13,3 @@
     # ISO 8601?
-    if date =~ /(\d\d\d\d)-?(?:(\d\d)-?(\d\d)?)? *(?:(\d\d):(\d\d)(?::(\d\d))?)?/
+    if date =~ /^(\d\d\d\d)-?(?:(\d\d)-?(\d\d)?)? *(?:(\d\d):(\d\d)(?::(\d\d))?)?$/
       return $1.to_i,