>|とりあえず、由緒正しい (?) date (1)、asctime(3)、RFC 822 スタイルなど >|には対応したつもりです。 昨日、 気がついたのですが、date (1) でタイムゾーンがうまくとれない場合 があるようです。一応、訂正しておきます。 --- scandate.rb.orig Mon Feb 2 23:12:28 1998 +++ scandate.rb Mon Feb 2 23:12:28 1998 @@ -13,14 +13,17 @@ if date.sub!(/(#{DAYPAT})[a-z]*,?/i, ' ') wday = DAYS[$1.downcase] end - if date.sub!(/(\d+):(\d+)(?::(\d+))?(?:\s+([A-Z]{1,3}|[-+]\d{4}))?/, ' ') + if date.sub!(/(\d+):(\d+)(?::(\d+))?\s*(am|pm)?\s*(?:\s+([a-z]{1,4}(?:\s+[a-z]{1,4})|[-+]\d{4}))?/i, ' ') hour = $1.to_i min = $2.to_i if $3 sec = $3.to_i end - if $4 - zone = $4 + if $4 == 'pm' + hour += 12 + end + if $5 + zone = $5 end end if date.sub!(/(\d+)\S*\s+(#{MONTHPAT})\S*(?:\s+(\d+))?/i, ' ') @@ -35,7 +38,7 @@ if $3 year = $3.to_i end - elsif date.sub!(/(\d\d?)\/(\d\d?)(?:\/(\d+))/, ' ') + elsif date.sub!(/(\d+)\/(\d+)(?:\/(\d+))/, ' ') mon = $1.to_i mday = $2.to_i if $3 ># 私に好かれても,嬉しくないかも知れませんが ^^;;; とても嬉しいです :-) >う,確かに.asctimeという以上asctime(3)にあわせるべきのよう >な気もします.どうしようかな. よく事情がわからないのですが、UNIX において、asctime(3) は日付の書式の 標準だったと思います (徐々に崩れつつあるようで、locale で書式を変えて しまう asctime(3) もあるわけで)。昔のソフトウェアは ctime(3) や、それ から切り出したものをよく使っていたような気がします (本当は昔のことは知 りません :-)。 マニュアルには大抵、 asctime(3) が生成する 26 文字の例が載っています。 GNU Emacs Lisp のマニュアルには (current-time-string) の書式は固定であっ て、(substring) で切り出してよいということが書いてあります。 この (current-time-string) はじつは ctime(3)、つまり asctime(3) でした (\n\0 は削ってありますが、これは Python などでも同じ)。 こんな細いことはどうでもよろしい、という主張もあります。僕もそんな気が するのですが、我々にとってどうでもいいなら、センパイの作ったものをわざ わざ変える必要もないのかもしれず、変えるなら、その理由が欲しくなるとい うことはあります (もっと簡単にいえないものか :-)。 #Time クラスの to_a はマニュアルには載ってないのですが、これは正式な仕 #様には含まれていないのですか? --Tadayoshi Funaba