summaryrefslogtreecommitdiff
path: root/lib/parsedate.rb
diff options
context:
space:
mode:
authortadf <tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-05-18 12:41:51 +0000
committertadf <tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-05-18 12:41:51 +0000
commitdc9cd6a8c22ad04baa7498fd0cbc5d519ed73be0 (patch)
tree0ed1cbf5a8ad5f37de2ad85b553844855abda41c /lib/parsedate.rb
parent62f83f9f13164cb2bfca7e18977620f649365e43 (diff)
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
Diffstat (limited to 'lib/parsedate.rb')
-rw-r--r--lib/parsedate.rb180
1 files changed, 7 insertions, 173 deletions
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