1
a = '12'

我想检查这个对象是否有时间值。假设我愿意a.try(:to_time)。这将返回一个ArgumentError. 我可以检查一个值是否是接收truefalse响应的时间值?

4

4 回答 4

4

您可以使用respond_to?来检查对象是否响应该方法。

a.respond_to?(:to_time)

编辑

它提出ArgumentError了我之前错过的问题。respond_to?有帮助NoMethodError,但不是ArgumentError

您应该查看 的to_time定义,以了解该方法有多少个参数以及哪些参数。

于 2012-10-04T15:48:29.850 回答
3
a = "12"
p a.is_a?(Time)      #false
p a.class  == String #true
p a.is_a?(Object)    #true (a's class or superclass)
于 2012-10-04T15:57:38.250 回答
-1

要解析时间,请尝试使用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
于 2012-10-04T15:50:46.500 回答
-2

似乎没有内置的方法可以做到这一点。但是你总是可以重载 String 模型。就像是 -

    class String
       def to_time
          begin
             Time.parse(self)
          rescue Exception => exception
             return false
          end
          return true
       end
    end
于 2012-10-04T15:51:28.277 回答