ArgumentError:无效的strptime格式 - “%m /%d /%y”在

时间:2017-04-11 21:47:18

标签: ruby date time strptime

我正在使用sftp导入错误,我正在尝试标记导入的任何错误日期。可以关闭两种类型的日期。第一个是未来的一年,或过去的一年;第二个是实际的月份和天数太高。 (例如,13/20/1995,或11/35/2000)

我正在使用strptime和关闭日期,标记它们并将它们显示为特定消息。我遇到的问题是,我正在使用strptime格式,错误发生在我错误消息中。

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

table_birth_dates.map! do |date|
  birth_date = Date.strptime(date, '%m/%d/%Y')

  if birth_date.nil?
    month_day_error_message = 'Invalid Month/Day'
  elsif birth_date > Time.zone.today
    future_error_message = 'Year in Future'
  elsif birth_date.year < 1900
    past_error_message = 'Year too old'
  else
    birth_date
  end
end

错误发生在birth_date = Date.strptime(date, '%m/%d/%Y') 对于10/3/1891,之类的日期,它会将其显示为Sat, 03 Oct 1891. 但是,对于混乱的日期,例如33/33/2000,它显示了一个错误(这是有道理的)但是我希望在我的条件中修复此错误。

有人知道我能做什么吗?

1 个答案:

答案 0 :(得分:1)

如果您想使用strptime,唯一的选择就是拯救错误:

begin
  birth_date = Date.strptime(date, '%m/%d/%Y')
rescue ArgumentError => ex
  raise ex unless ex.message == 'invalid date'
  # handle invalid date
end

您可以将date设置为,例如:invalid,然后在条件中设置date == :invalid,如果您想保留所有逻辑而不是rescue本身。