如何测试无法解析的特定日期

时间:2017-04-10 17:04:55

标签: ruby-on-rails ruby date

我需要测试一个特定的日期数组,以确保它们的格式正确,但是我不能使用“解析”#39;因为,如果我这样做,那么不正确的日期就会被整理出来。例如,如果我的月份日期不正确,那么它会增加一年并将月份设置为1。

我的代码从SQL查询中提取日期:

table_birth_dates = self.class.connection.execute("SELECT birth_date FROM #{temp_table_name}").values.flatten 

[
    [0] "1980-30-54",
    [1] "1980-30-54",
    [2] "2020-09-10",
    [3] "1890-10-30"
]
yr = 1900  
year_test = table_birth_dates.select{|d| Date.parse(d).year < yr}

这现在给了我一个ArgumentError: invalid date

我想过使用:

splitted_birth_date = table_birth_dates.first.split("-")
splitted_birth_date.first.to_i > 1900?

但如果我试图遍历我的所有日​​期,我就无法通过拆分来操纵任何事情:

table_birth_dates.each do |birth_date|
  birth_date.split("-")
end

我该怎么办?

2 个答案:

答案 0 :(得分:0)

  

我需要测试一个特定的日期数组,以确保它们在   格式正确......

如果您收到错误,则表示日期不正确,您可以挽救该错误,并根据该日期执行任何操作以使其有效或等等。

table_birth_dates.each do |birth_date|
  begin
    if Date.parse(d).year < yr
      # do smth
    end
  rescue ArgumentError => e
   # do smth with `d`
  end
end

答案 1 :(得分:0)

您可以将selectsplit方法结合在一起:

table_birth_dates.select { |d| d.split('-').first.to_i < 1900 }
#=> ["1890-10-30"]