From: Kazuhiro NISHIYAMA Date: 2002-02-24T17:28:19+09:00 Subject: [ruby-dev:16050] ParseDate.to_time 西山和広です。 ちゃんとタイムゾーンを扱えるようにするのは難しいようなので 標準で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)