mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Time.parse based from non-Time object
* lib/time.rb (Time.make_time): as the document states, the second argument of `Time.parse` may be a non-`Time` object which does not have `getlocal` method, assume it is in the local time in the case. based on the patch by nkmrya (Yasuhiro Nakamura) at [ruby-core:68775]. [ruby-core:68775] [Bug #11037] Co-authored-by: nkmrya (Yasuhiro Nakamura) <yasuhiro6194@gmail.com> git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64975 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
97fffcadcb
commit
7f9089a186
2 changed files with 20 additions and 1 deletions
|
@ -267,7 +267,7 @@ class Time
|
|||
return make_time(date, year, nil, mon, day, hour, min, sec, sec_fraction, zone, now)
|
||||
end
|
||||
|
||||
if now
|
||||
if now and now.respond_to?(:getlocal)
|
||||
if off
|
||||
now = now.getlocal(off) if now.utc_offset != off
|
||||
else
|
||||
|
|
|
@ -523,4 +523,23 @@ class TestTimeExtension < Test::Unit::TestCase # :nodoc:
|
|||
define_method(test) {__send__(sub, :xmlschema)}
|
||||
define_method(test.sub(/xmlschema/, 'iso8601')) {__send__(sub, :iso8601)}
|
||||
end
|
||||
|
||||
def test_parse_with_various_object
|
||||
d = Date.new(2010, 10, 28)
|
||||
dt = DateTime.new(2010, 10, 28)
|
||||
md = MyDate.new(10, 28, 2010)
|
||||
|
||||
t = Time.local(2010, 10, 28, 21, 26, 00)
|
||||
assert_equal(t, Time.parse("21:26", d))
|
||||
assert_equal(t, Time.parse("21:26", dt))
|
||||
assert_equal(t, Time.parse("21:26", md))
|
||||
end
|
||||
|
||||
class MyDate
|
||||
attr_reader :mon, :day, :year
|
||||
|
||||
def initialize(mon, day, year)
|
||||
@mon, @day, @year = mon, day, year
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue