たけ(tk)です。 Tadayoshi Funaba さん曰く。 》ふなばです。 早速ありがとうございます。 もともと、なんでこのような質問をしたかというと、データベースに入ってい る DateTime 型のデータを Ruby に翻訳しようと思ったら、Time も Date も使 えなかった、ということなのです。それはそれとして・・。 》> 1 なぜ Time と Date があるのか?。Time の時刻部分がない物が Date では 》> ないのか?。 》 》んー、それはどうでしょう。 》> 4 Time で時刻部分をカットするメソッドはないのか?。 》 》カットとは? どうでしょう?。理論的には分かりませんが Delphi の DateTime 型のデフォ ルトの文字列表現(DateTimeToStr)では、時刻部分が 00:00:00 のときには ymd だけを文字列にするようになっています。これだと24時間のうち1秒ほど 困った表現になりますが、普通は日付型として扱いたい場合には時刻部分をカッ トしておけば(=00:00:00 にすれば)日付しか出なくなるので便利なわけです。 Date3 で「日付」だけを扱いたいときには便利ではなかろうか?。 date.to_s # (Date2) "2000-12-31" # (Date3) "2000-12-31T12:00:00,0Z" 》ちなみに、date2 パッケージに date3.rb というものがあります。実験的なも 》のですが、時刻もあらわせる Date です。 これが進化すれば Time の置き換えに使えそうですね。 》parsedate でもいいと思うのですが、date[23] では、strptime.rb を持って 》いますし、 Date#strftime も使えるんですね。知らなかった。 手順: (1) date2.2.2 をダウンロードして解凍。 (2) strftime.rb をライブラリパスにコピー (3) require "strftime" を追加。 strptime の方は p Date.strptime( '2000-12-31' ) # nil では駄目で、書式を指定しなければならないんですね。 p Date.strptime( '2000-12-31' , '%F' ) # {:mday=>31, :mon=>12, :year=>2000} それと、Hash を返すだけで Date オブジェクトは作られない。さらに、その Hash を Date.new に送っても作ってくれない?。 p Date.new(Date.strptime( '2000-12-31' , '%F' )) # NG −− * バグめっけ。 p Date.strptime( '2000/12/31' , '%y/%m/%d' ) # {:mday=>31,:mon=>12, :year=>3900} p Date.strptime( '12/31/2000' , '%D' ) # {:year=>3900, :mday=>31,:mon=>12} −− 》> time = Time.mktime(ParseDate.parsedate('1999-12-31')) # NG 》> time = Date.new(ParseDate.parsedate('1999-12-31')) # NG 》 》これやると、どうしてタイムゾーンが反映されないんだ、とか、いわれるかな。 しかし、Date.new( 1999, 12, 31)が既に出来るのだから、変わらないのでは?。 Date.new の改造のつもり。 def new_date ymd , *args if ymd.is_a? String case ymd when /(\d+)\D+(\d+)\D+(\d+)/ return Date.new( $1.to_i , $2.to_i , $3.to_i ) end end Date.new ymd , *args end p new_date( '2000年12月31日' ).to_s p new_date( '2000 12 31' ).to_s p new_date( '2000.12.31' ).to_s p new_date( '2000/12/31' ).to_s p new_date( '2000-12-31' ).to_s p new_date( 2000,12,31 ).to_s PS. 》ggb03124 / nifty.ne.jp ( =?ISO-2022-JP?B?GyRCJD8kMRsoQg==?= (tk)) wrote: ↑ Becky! で送信もとIDを変える方法が分からない。 PS2. ライブラリで日本語が使えないのは痛いですね・・。 PS3. Delphi では、ShortDateFormat(='yy/MM/dd'), LongTimeFormat(= 'hh:mm:ss')というグローバル変数があって、これを変えておくとデフォルトの 文字列変換ルーティン(to_s 相当)の変換方式を変えることが出来る。また、 プログラムの開始前にプラットフォームを調べて、このグローバル変数を変えて いる。 c:\progra~1\borland\delphi5\source\rtl\sys\sysutils.pas たけ(tk) ggb03124 / nifty.ne.jp http://member.nifty.ne.jp/take_tk