西山和広です。

ちゃんとタイムゾーンを扱えるようにするのは難しいようなので
標準でTimeオブジェクトを返すメソッドがParseDateにほしいです。


# タイムゾーンが間違っている実行例
ParseDate.mkTimeObj '2001-01-18 12:09:47+09'
  #=> Thu Jan 18 12:09:47 UTC 2001
ParseDate.to_time '2001-01-18 12:09:47+00'
  #=> Thu Jan 18 12:09:47 JST 2001

http://www.ruby-lang.org/ja/man-1.6/?cmd=view;name=ParseDate より
module ParseDate
  def to_time(date, cyear=false)
    ary = parsedate(date, cyear)
    if ary[6] == 'GMT'
      Time::gm(*ary[0..-3])
    else
      Time::local(*ary[0..-3])
    end
  end
  module_function :to_time
end


http://tamura.tdiary.net/?date=20020221#p06 より
## $Id: mktime.rb,v 1.1 2002/02/20 08:43:15 tamura Exp $
 
require 'parsedate.rb' 
 
module ParseDate
  def mkTimeObj str
    # from parsedate function
    year, mon, mday, hour, min, sec, zone, wday = 
    0,    1,   2,    3,    4,   5,   6,    7
    t = parsedate(str)
    #                                                           yday,isdst
    Time.gm(t[sec],t[min],t[hour],t[mday],t[mon],t[year],t[wday],nil,nil,t[zone])
  end
  module_function :mkTimeObj
end
 
if __FILE__ == $0  # for test
  IO.foreach(__FILE__) do |line|
    if %r|\$Id: .+ (\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) .+ Exp \$$| === line then
      p $1                       #-> "2002/02/20 08:43:15"
      p ParseDate::parsedate($1) #-> [2002, 2, 20, 8, 43, 15, nil, nil]
      p ParseDate::mkTimeObj($1) #-> Wed Feb 20 08:43:15 UTC 2002
      p ParseDate::mkTimeObj($1).localtime.strftime("%Y-%m-%d %X")
                                 #-> "2002-02-20 17:43:15"
      exit
    end
  end
end


-- 
|ZnZ(ゼット エヌ ゼット)
|西山和広(Kazuhiro NISHIYAMA)