Date.parse("##-##-##")

 Date.parse("##.##.##") の ruby_1_8 における挙動が trunk とも
ruby_1_8_6 とも異なります。

% for ruby in ruby-{1.8.6,1.8,1.9}; do $ruby -rdate -ve ‘p
Date.parse(“10.09.08”).strftime("%Y-%m-%d")’; done
ruby 1.8.6 (2008-03-03 patchlevel 114) [i686-darwin9.2.2]
“0008-10-09”
ruby 1.8.7 (2008-05-17 patchlevel 5000) [i686-darwin9.2.2]
“0010-09-08”
ruby 1.9.0 (2008-05-18 revision 15263) [i686-darwin9.2.2]
“2010-09-08”

 どちらかに合わせることはできないでしょうか。

e$B!!$I$A$i$+$K9g$o$;$k$3$H$O$G$-$J$$$G$7$g$&$+!#e(B

e$B0JA0$O!“JF9q<0$KH=CG$7$F$$$^$7$?$,!”<B:]$N$H$3$mJF9q$J$I$G$"$^$j$D$+$oe(B
e$B$l$:!"$`$7$mF|K<~JU9q$G!"$D$+$o$l$k$[$&$,B?$$$HH=CG$7$FJQ99$7$^$7$?!#e(B
e$B%I%$%D$J$I2$=#$N0lIt$G$D$+$o$l$F$$$k$H;W$$$^$9$,!"$d$O$j=gHV$,0c$&$N$Ge(B
e$B5_$o$l$^$;$s$,!"$3$N7o$K$D$$$F$O!":G=i$NKM$NH=CG$,$h$/$J$+$C$?$H;W$$$^e(B
e$B$9$,!“4pK\E*$K$O!”$3$N$h$&$K@5$7$?$$$H;W$C$F$$$^$9!#e(B

1.9 e$B$G$O!"$5$i$KG/$NJd40$r%G%U%)%k%H$G$9$k$h$&$K$J$C$F$$$^$9!#e(B

At Mon, 19 May 2008 08:06:58 +0900,
Tadayoshi F. wrote:

 どちらかに合わせることはできないでしょうか。

以前は、米国式に判断していましたが、実際のところ米国などであまりつかわ
れず、むしろ日本周辺国で、つかわれるほうが多いと判断して変更しました。
ãƒ‰ã‚¤ãƒ„ãªã©æ¬§å·žã®ä¸€éƒ¨ã§ã¤ã‹ã‚ã‚Œã¦ã„ã‚‹ã¨æ€ã„ã¾ã™ãŒã€ã‚„ã¯ã‚Šé †ç•ªãŒé•ã†ã®ã§
救われませんが、この件については、最初の僕の判断がよくなかったと思いま
すが、基本的には、このように正したいと思っています。

1.9 では、さらに年の補完をデフォルトでするようになっています。

 なるほど、お考えはわかりました。ありがとうございます。

 今、 RubySpec 等で判明した非互換性について NEWS に記述を追åŠ
しているところなのですが、本件についてのユーザ向けの説明は次の
ような感じでいいのでしょうか。

 「1.9 同様、"##.##.##"は"YY.MM.DD"と解釈されるようになった。
なお、 1.9 からは二桁の西暦年は自動で 1969-2068 に補完される
ようになるので、今のうちから Date.parse(str, true) としておく
といいよ。」

ã€€ä¸Šè¨˜ãŒæ­£ç¢ºã§ã¯ãªã„å ´åˆã€æ›¸ãæ›ãˆæ–¹æ³•ã‚„ãã®èª¬æ˜ŽãŒã‚ã¾ã‚Šã«é¢å€’
なら 1.8.6 の仕様に戻すことも検討したいのですが、何かよい案は
あるでしょうか。

 返事が遅くなってしまいました。

At Mon, 19 May 2008 21:50:29 +0900,
Tadayoshi F. wrote:

この件については、ドイツの方と少し議論して、米国式に解釈するのはあまり
意味がない、ということになって、バグではないですが、バグに近い対処とい
うことにしました。

Date.parse(‘01.02.2003’)

も変っていて、dd.mm.yyyy と解釈されます。(##)?##.##.## は日本式、たã
し ##.##.#### は欧州式、ということになっています。

 なるほど。期待と違うのでほとんど使われていない可能性もあると
いうことですね。

 形式がわかっているなら Date.strptime を使った方がよさそうです。

このあたり、1.8 でも書式について少し柔軟に対応するようにしたのは、1.8
で、Time#to_s の書式があっさり変更されたことが影響していると思います
(こっちのほうが影響が大きいとおもう)。さらに、1.9 で変更されていますが、
それによって、Time#to_s をつかうな、というような事があるなら、parse の
ほうも考える必要があるのかもしれません。

 Time#to_s の書式が変わったというのは 1.8.5 と 1.8.6 の間の話
ですね。後方互換性に関するポリシーを掲げた手前もあり、 1.8.6
リリースでは元に戻しました。(cf. [ruby-dev:30493])

 基本的には、 1.8.7 で変更、 1.9 でまた変更というのは避けたい
です。しかし、本件については古い仕様では事実上役に立たなかった
という判断は理解できるので、ドキュメントでうまくユーザを誘導
できるのなら問題ないと思います。

個人的には、この件を指摘するのは親切だと思いますが、今から、
Date.parse(str, true) しろ、というのは要らないと思います。

 1.9 への橋渡しが 1.8.7 のテーマのひとつなので、その役に立ち
ãã†ãªæƒ…å ±ã¯æ·»ãˆãŸã„ã¨æ€ã£ã¦ã„ã¾ã™ã€‚

e$B!!$J$k$[$I!#4|BT$H0c$&$N$G$[$H$s$I;H$o$l$F$$$J$$2DG=@-$b$"$k$He(B
e$B$$$&$3$H$G$9$M!#e(B

e$B$=$&$$$&$3$H$G$9$M!#e(B

e$B!!e(BTime#to_s e$B$N=q<0$,JQ$o$C$?$H$$$&$N$Oe(B 1.8.5 e$B$He(B 1.8.6 e$B$N4V$NOCe(B
e$B$G$9$M!#8eJ}8_49@-$K4X$9$k%]%j%7!<$r7G$2$?<jA0$b$"$j!"e(B 1.8.6
e$B%j%j!<%9$G$O85$KLa$7$^$7$?!#e(B(cf. [ruby-dev:30493])

e$B$=$l$O5DO@$N0lIt$G$"$C$?$H;W$$$^$9$,!"<B:]$Ke(B 1.8
e$B$N4V$KJQ99$5$l$F$$$ke(B
e$B$N$G$9!#e(B

$ ruby184 -e ‘p Time.now.to_s’
“Sun May 25 09:13:48 JST 2008”

$ ruby185 -e ‘p Time.now.to_s’
“Sun May 25 09:13:53 +0900 2008”

e$B$=$l$G!"$"$C$5$jJQ99$5$l$?;v$b$"$C$F!"=q<0$K$D$$$F$O!"$"$kDxEY$O=@Fp$Ke(B
e$B$d$C$F$h$$!"$H$$$&46?*$,$"$j$^$7$?!#e(B

e$B!!4pK\E*$K$O!"e(B 1.8.7 e$B$GJQ99!"e(B 1.9 e$B$G$^$?JQ99$H$$$&$N$OHr$1$?$$e(B
e$B$G$9!#$7$+$7!“K\7o$K$D$$$F$O8E$$;EMM$G$O;veLr$KN)$?$J$+$C$?e(B
e$B$H$$$&H=CG$OM}2r$G$-$k$N$G!”%I%-%e%a%s%H$G$&$^$/%f!<%6$rM6F3e(B
e$B$G$-$k$N$J$iLdBj$J$$$H;W$$$^$9!#e(B

e$B$=$N$"$?$j$NH=CG$O$*G$$;$7$^$9!#e(B

e$B!!:#!"e(B RubySpec e$BEy$GH=L@$7$?Hs8_49@-$K$D$$$Fe(B NEWS e$B$K5-=R$rDI2Ce(B
e$B$7$F$$$k$H$3$m$J$N$G$9$,!"K\7o$K$D$$$F$N%f!<%68~$1$N@bL@$O<!$Ne(B
e$B$h$&$J46$8$G$$$$$N$G$7$g$&$+!#e(B

e$B!!!Ve(B1.9 e$BF1MM!“e(B”##.##.##"e$B$Oe(B"YY.MM.DD"e$B$H2r<a$5$l$k$h$&$K$J$C$?!#e(B
e$B$J$!“e(B 1.9 e$B$+$i$OFs7e$N@>NqG/$O<+F0$Ge(B 1969-2068 e$B$KJd40$5$l$ke(B
e$B$h$&$K$J$k$N$G!”:#$N$&$A$+$ie(B Date.parse(str, true) e$B$H$7$F$
$/e(B
e$B$H$$$$$h!#!We(B

e$B$3$N7o$K$D$$$F$O!"%I%$%D$NJ}$H>/$75DO@$7$F!“JF9q<0$K2r<a$9$k$N$O$”$^$je(B
e$B0UL#$,$J$$!"$H$$$&$3$H$K$J$C$F!"%P%0$G$O$J$$$G$9$,!"%P%0$K6a$$BP=h$H$$e(B
e$B$&$3$H$K$7$^$7$?!#e(B

Date.parse(‘01.02.2003’)

e$B$bJQ$C$F$$$F!“e(Bdd.mm.yyyy e$B$H2r<a$5$l$^$9!#e(B(##)?##.##.##
e$B$OF|K<0!”$?$@e(B
e$B$7e(B ##.##.#### e$B$O2$=#<0!"$H$$$&$3$H$K$J$C$F$$$^$9!#e(B

e$B!!>e5-$,@53N$G$O$J$$>l9g!"=q$-49$(J}K!$d$=$N@bL@$,$"$^$j$KLLE]e(B
e$B$J$ie(B 1.8.6 e$B$N;EMM$KLa$9$3$H$b8!F$$7$?$$$N$G$9$,!“2?$+$h$$0F$Oe(B
e$B$”$k$G$7$g$&$+!#e(B

e$B$3$N$"$?$j!"e(B1.8
e$B$G$b=q<0$K$D$$$F>/$7=@Fp$KBP1~$9$k$h$&$K$7$?$N$O!"e(B1.8
e$B$G!“e(BTime#to_s
e$B$N=q<0$,$”$C$5$jJQ99$5$l$?$3$H$,1F6A$7$F$$$k$H;W$$$^$9e(B
(e$B$3$C$A$N$[$&$,1F6A$,Bg$-$$$H$*$b$&e(B)e$B!#$5$i$K!"e(B1.9
e$B$GJQ99$5$l$F$$$^$9$,!“e(B
e$B$=$l$K$h$C$F!“e(BTime#to_s
e$B$r$D$+$&$J!”$H$$$&$h$&$J;v$,$”$k$J$i!“e(Bparse e$B$Ne(B
e$B$[$&$b9M$($kI,MW$,$”$k$N$+$b$7$l$^$;$s!#e(B

e$B8D?ME*$K$O!"$3$N7o$r;XE&$9$k$N$O?F@Z$@$H;W$$$^$9$,!":#$+$i!“e(B
Date.parse(str, true) e$B$7$m!”$H$$$&$N$OMW$i$J$$$H;W$$$^$9!#e(B