a = '12'
我想检查这个对象是否有时间值。假设我愿意a.try(:to_time)
。这将返回一个ArgumentError
. 我可以检查一个值是否是接收true
或false
响应的时间值?
a = '12'
我想检查这个对象是否有时间值。假设我愿意a.try(:to_time)
。这将返回一个ArgumentError
. 我可以检查一个值是否是接收true
或false
响应的时间值?
您可以使用respond_to?
来检查对象是否响应该方法。
a.respond_to?(:to_time)
编辑
它提出ArgumentError
了我之前错过的问题。respond_to?
有帮助NoMethodError
,但不是ArgumentError
。
您应该查看 的to_time
定义,以了解该方法有多少个参数以及哪些参数。
a = "12"
p a.is_a?(Time) #false
p a.class == String #true
p a.is_a?(Object) #true (a's class or superclass)
要解析时间,请尝试使用Time.parse
:
irb(main):002:0> Time.parse('12:00')
=> 2012-10-04 12:00:00 -0700
irb(main):003:0> Time.parse('the time is 12:00')
=> 2012-10-04 12:00:00 -0700
irb(main):005:0> Time.parse('jan 1, 1970 11:11')
=> 1970-01-01 11:11:00 -0700
请注意,这会默默地失败:
irb(main):004:0> Time.parse('12 noon')
=> 2012-10-12 00:00:00 -0700
似乎没有内置的方法可以做到这一点。但是你总是可以重载 String 模型。就像是 -
class String
def to_time
begin
Time.parse(self)
rescue Exception => exception
return false
end
return true
end
end