ふなばです。

うーん、%c は ctime() と同じという解釈のものもあるし、そうでないのもあ
るようです。ハッキリしたことを書いてあるマニュアルは見たことないです。
ANSI C では仰るような解釈みたいですね。

で、 今回のこの話は、そのことではなくて、strftime() の %d のことです。
to_s  は、由緒正しい date(1) の書式ということですが、time.c を見ると、
strftime() に "%a %b %d %H:%M:%S %Z %Y" という書式が与えられています。
%d は 01-31 なんです。 1-31 じゃないんです。いくつかの strftime() には
%e があって、これが 1-31 なんです。

Thu Jul  3 01:02:03 JST 1997 (date)
Thu Jul 03 01:02:03 JST 1997 (ruby)

GNU date ではどうしているのかと、ソースをみてみると、堂々と %e をつかっ
ていました。コメントによると、素の ANSI C にはないが、POSIX にあるとい
うことらしい。GNU date では  configure script の執拗な走査で、不合格者
は、GNU strftime() に置き換えられてしまいます。

これは date(1) じゃないんで、Ruby でそこまですべきものでもないような気
がしますが。date(1) の書式の話もあったので、念のため。

--Tadayoshi Funaba