Bug #11037

Updated by nobu (Nobuyoshi Nakada) over 4 years ago

According to:

`Time#parse` Time#parse can take a 2nd parameter:

> We can change the date used to infer our missing elements by passing a second object that responds to mon, day and year, such as `Date`, `Time` Date, Time or `DateTime`. DateTime. We can also use our own object.

However, that is not correct:

~~~ruby <pre>
irb(main):010:0> Time.parse('12:30 AM',
NoMethodError: undefined method `getlocal' for #<Date: 2015-04-07 ((2457120j,0s,0n),+0s,2299161j)>
from C:/mingw64/mingw64/local/ruby/lib/ruby/2.2.0/time.rb:262:in `make_time'
from C:/mingw64/mingw64/local/ruby/lib/ruby/2.2.0/time.rb:364:in `parse'
from (irb):10
from C:/mingw64/mingw64/local/ruby/bin/irb:11:in `<main>'
~~~ </pre>

The problem is in `Time#make_time`, Time#make_time, lines 259 through 263:

~~~ruby <pre>
if off
now = now.getlocal(off) if now.utc_offset != off
now = now.getlocal
~~~ </pre>

The behavior the documentation does seem desirable, so the code above should check if the now parameter responds to `getlocal` getlocal or not (only `Time` Time does, `Date` Date and `DateTime` DateTime do not). Or of course the documentation should be updated to specify that a time object must be passed as the now parameter.