From dc9cd6a8c22ad04baa7498fd0cbc5d519ed73be0 Mon Sep 17 00:00:00 2001 From: tadf Date: Sat, 18 May 2002 12:41:51 +0000 Subject: updated to the new version (based on date2 3.2.1). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2467 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/parsedate.rb | 180 +++---------------------------------------------------- 1 file changed, 7 insertions(+), 173 deletions(-) (limited to 'lib/parsedate.rb') diff --git a/lib/parsedate.rb b/lib/parsedate.rb index 7fc75cf0c2..89aeac0031 100644 --- a/lib/parsedate.rb +++ b/lib/parsedate.rb @@ -1,179 +1,13 @@ -# parsedate3.rb: Written by Tadayoshi Funaba 2000, 2001 -# $Id: parsedate3.rb,v 1.3 2001-01-18 12:09:47+09 tadf Exp $ +# parsedate.rb: Written by Tadayoshi Funaba 2001, 2002 +# $Id: parsedate.rb,v 2.6 2002-05-14 07:43:18+09 tadf Exp $ -module ParseDate - - MONTHS = { - 'jan' => 1, 'feb' => 2, 'mar' => 3, 'apr' => 4, - 'may' => 5, 'jun' => 6, 'jul' => 7, 'aug' => 8, - 'sep' => 9, 'oct' =>10, 'nov' =>11, 'dec' =>12 - } - MONTHPAT = MONTHS.keys.join('|') - - DAYS = { - 'sun' => 0, 'mon' => 1, 'tue' => 2, 'wed' => 3, - 'thu' => 4, 'fri' => 5, 'sat' => 6 - } - DAYPAT = DAYS.keys.join('|') - - def parsedate(date, cyear=false) - date = date.dup - - # day - if date.sub!(/(#{DAYPAT})\S*/ino, ' ') - wday = DAYS[$1.downcase] - end - - # time - if date.sub!( - /(\d+):(\d+)(?::(\d+))? - (?: - \s* - ([ap])\.?m\.? - \b - )? - (?: - \s* - ( - [a-z]+(?:\s+dst)? - | - [-+]\d+(?::?\d+) - ) - \b - )? - /inox, - ' ') - hour = $1.to_i - min = $2.to_i - sec = $3.to_i if $3 - if $4 - hour %= 12 - if $4.downcase == 'p' - hour += 12 - end - end - zone = $5 - end - - # eu - if date.sub!( - /(\d+)\S* - \s+ - (#{MONTHPAT})\S* - (?: - \s+ - (\d+) - )? - /inox, - ' ') - mday = $1.to_i - mon = MONTHS[$2.downcase] - year = $3.to_i if $3 - - # us - elsif date.sub!( - /(#{MONTHPAT})\S* - \s+ - (\d+)\S* - (?: - \s+ - (\d+) - )? - /inox, - ' ') - mon = MONTHS[$1.downcase] - mday = $2.to_i - year = $3.to_i if $3 +require 'date/format' - # iso - elsif date.sub!(/(\d+)-(\d+)-(\d+)/no, ' ') - year = $1.to_i - mon = $2.to_i - mday = $3.to_i - mday, mon, year = year, mon, mday if $3.size >= 4 - - # jis - elsif date.sub!(/([MTSH])(\d+)\.(\d+)\.(\d+)/no, ' ') - e = { 'M'=>1867, - 'T'=>1911, - 'S'=>1925, - 'H'=>1988 - }[$1] - year, mon, mday = $2.to_i + e, $3.to_i, $4.to_i - - # vms - elsif date.sub!(/(\d+)-(#{MONTHPAT})\S*-(\d+)/ino, ' ') - mday = $1.to_i - mon = MONTHS[$2.downcase] - year = $3.to_i - year, mon, mday = mday, mon, year if $1.size >= 4 - - # sla - elsif date.sub!(%r|(\d+)/(\d+)(?:/(\d+))?|no, ' ') - mon = $1.to_i - mday = $2.to_i - year = $3.to_i if $3 - year, mon, mday = mon, mday, year if $1.size >= 4 - - # ddd - elsif date.sub!( - /(\d{4,14}) - (?: - \s* - T? - \s* - (\d{2,6}) - )? - (?: - \s* - ( - Z - | - [-+]\d{2,4} - ) - \b - )? - /nox, - ' ') - case $1.size - when 4 - mon = $1[ 0, 2].to_i - mday = $1[ 2, 2].to_i - when 6 - year = $1[ 0, 2].to_i - mon = $1[ 2, 2].to_i - mday = $1[ 4, 2].to_i - when 8, 10, 12, 14 - year = $1[ 0, 4].to_i - mon = $1[ 4, 2].to_i - mday = $1[ 6, 2].to_i - hour = $1[ 8, 2].to_i if $1.size >= 10 - min = $1[10, 2].to_i if $1.size >= 12 - sec = $1[12, 2].to_i if $1.size >= 14 - end - if $2 - case $2.size - when 2, 4, 6 - hour = $2[ 0, 2].to_i - min = $2[ 2, 2].to_i if $2.size >= 4 - sec = $2[ 4, 2].to_i if $2.size >= 6 - end - end - zone = $3 - end - - if cyear and year - if year < 100 - if year >= 69 - year += 1900 - else - year += 2000 - end - end - end - - return year, mon, mday, hour, min, sec, zone, wday +module ParseDate + def parsedate(str, comp=false) + Date._parse(str, comp). + indexes(:year, :mon, :mday, :hour, :min, :sec, :zone, :wday) end module_function :parsedate -- cgit v1.2.3