我正在使用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
,它显示了一个错误(这是有道理的)但是我希望在我的条件中修复此错误。
有人知道我能做什么吗?
答案 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
本身。