Jacob Gorban wrote: > Hi, > > For some reason ruby 1.8.6 return invalid date exception when parsing a > date of Oct 31 (yesterday) in the format above. Oct 30 and most other > dates parses fine and run fine. Time, year or timezone don't matter. I doubt it "parses fine" by your definition: >> Date.parse('17:26:33 Oct 30, 2009').to_s => "2009-11-30" If you want to see why, the source to date.rb is there. The heavy lifting is in Date._parse from date/format.rb, which you can walk through by hand easily enough. >> require 'date' => true >> str = '17:26:33 Oct 30, 2009' => "17:26:33 Oct 30, 2009" >> e = Date::Format::Bag.new => #<Date::Format::Bag:0xb7b2daec @elem={}> >> str.gsub!(/[^-+',.\/:0-9@a-z\x80-\xff]+/in, ' ') => "17:26:33 Oct 30, 2009" >> Date.class_eval { _parse_time(str, e) } => true >> Date.class_eval { _parse_day(str, e) } => nil >> e.to_hash => {:zone=>"Oct", :sec=>33, :hour=>17, :min=>26} >> str => " 30, 2009" >> Date.class_eval { ?> _parse_eu(str, e) || ?> _parse_us(str, e) || ?> _parse_iso(str, e) || ?> _parse_jis(str, e) || ?> _parse_vms(str, e) || ?> _parse_sla_us(str, e) || ?> _parse_iso2(str, e) || ?> _parse_year(str, e) || ?> _parse_mon(str, e) || ?> _parse_mday(str, e) || ?> _parse_ddd(str, e) >> } => true >> e.to_hash => {:zone=>"Oct", :sec=>33, :hour=>17, :mday=>30, :min=>26} >> So you can see that "Oct" is taken as the timezone, and there is no month. I expect it's subsequently defaulting the month to the current month (Nov), and that's why you're not allowed the 31st. HTH, Brian. -- Posted via http://www.ruby-forum.com/.