在Ruby中验证DateTime对象



以下代码中的构造函数接收参数中的DateTime对象

class Test
    attr_accessor :dateTime
    # Takes DateTime object as input
    def initialize(dateTime)
        @dateTime = dateTime
    end
end

如何验证传递给构造函数的dateTime参数是否是有效的dateTime对象?

找到答案的一种方法是使用:

if dateTime.class == DateTime

但是有更好的方法吗?

请记住,dateTime是dateTime对象,而不是字符串

您可以通过dateTime.is_a?(DateTime)进行检查,它将返回布尔

可能使用is_a?kind_of?,以灵活处理潜在的子类。

http://www.ruby-doc.org/core/classes/Object.html#M001033

尝试使用is_a?方法,这样,如果对象是目标类(DateTime)的实例或子类,则可以接受它:

dateTime.is_a?(DateTime)

如果你只想确保你得到了DateTime的一个实例(或一个子类),那么其他"是is_a?"的答案就是你想要的。

然而,你应该考虑对你的投入多一点宽容。如果有人递给你一根像"2011-06-28 23:31:11"这样的绳子怎么办?对大多数人来说,这是一个DateTime,尽管Ruby认为它是String的一个实例。如果你想变得更友好,你可以试试DateTime.parse这个:

begin
    dt = dt.is_a?(DateTime) ? dt : DateTime.parse(dt)
rescue ArgumentError
    # Do your failure stuff here
end

或者,如果你在Rails:

begin
    dt = dt.to_datetime
rescue ArgumentError, NoMethodError
    # Do your failure stuff here
end

这些方法在不损失任何东西的情况下为您提供了很大的灵活性。宽容你的投入,但严格你的产出。

作为参考,在Rails3中,以下有to_datetime方法:

  • 日期
  • 日期时间
  • 时间
  • 字符串

相关内容

  • 没有找到相关文章

最新更新