0

我有以下代码返回任何给定月份中的天数,除非有人输入不是日期的内容,或者他们的日期格式错误,否则它工作正常。为了解决这个问题,我想为无效输入发送错误消息,但我不知道如何。那么如何为这个小应用程序创建错误消息呢?

   #type in the month and year you want like so ---> "Feb 2034"

require 'date'

input = gets.chomp

inputArray = input.split(" ").to_a

textMonth = inputArray[0]
textYear = inputArray[1]

startOfMonth = Date.strptime(input, "%b %Y")
nextMonth = startOfMonth.next_month
endOfMonth = nextMonth - 1
daysInMonth = (endOfMonth - startOfMonth + 1).to_i

puts "#{textMonth} of year #{textYear} has #{daysInMonth} days!"
4

3 回答 3

1

可能最好的方法是把你的输入放在一个while循环中,每次输入不是你期望的那样时提示一个新的答案。

要检查输入,您应该使用Regexp。这是一个解释 如何编写一个正则表达式来匹配一个日期。

于 2018-05-16T20:37:59.013 回答
1

要创建自定义错误,请参阅以下代码:在这里我InvalidDateError为错误的日期输入创建并引发。

   #type in the month and year you want like so ---> "Feb 2034"
class InvalidDateError < StandardError
end

require 'date'
require 'pry-byebug'
input = gets.chomp

inputArray = input.split(" ").to_a

textMonth = inputArray[0] 
textYear = inputArray[1]
begin
    startOfMonth = Date.strptime(input, "%b %Y")
    nextMonth = startOfMonth.next_month
    endOfMonth = nextMonth - 1
    daysInMonth = (endOfMonth - startOfMonth + 1).to_i
    puts "#{textMonth} of year #{textYear} has #{daysInMonth} days!"
rescue StandardError=> e
    raise InvalidDateError.new("Invalid Date : #{input}")
end

如果您不想引发错误而只想显示错误消息,请替换raise InvalidDateError.new("Invalid Date : #{input}")puts "Invalid Date : #{input}"

于 2018-05-17T03:47:56.773 回答
1

正如 Viktor 所建议的那样,从crantok偷来的 :)

require 'date'
date_valid = false

while !date_valid
  puts 'Insert date as yyyy-mm-dd:'
  input_date = gets.chomp

  begin
    parsed_date = Date.parse(input_date)
    date_valid = true
  rescue ArgumentError
    puts 'format error'
  end
end

month = parsed_date.month
year = parsed_date.year
days_in_month = Date.new(year, month, -1).day
puts "In #{year} month #{month} has #{days_in_month} days"
于 2018-05-17T10:49:36.580 回答