如何检查对象是否具有时间值?

时间:2012-10-04 15:38:53

标签: ruby-on-rails ruby

a = '12'

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

4 个答案:

答案 0 :(得分:4)

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

a.respond_to?(:to_time)

修改

它提出了我之前错过的ArgumentErrorrespond_to?帮助NoMethodError,但不是ArgumentError

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

答案 1 :(得分: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)

答案 2 :(得分:-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

答案 3 :(得分:-2)

似乎没有内置方法来执行此操作。但是你总是可以重载String模型。像 -

这样的东西
    class String
       def to_time
          begin
             Time.parse(self)
          rescue Exception => exception
             return false
          end
          return true
       end
    end