我目前正在研究功能完善的Rubyist,并且对一个练习有疑问,该练习要求检查提供的日期是否采用“ yyyy-mm-dd”格式,而不是“ yy-mm-dd”格式'。
我们有一个Ticket
类,应该创建一个date=
方法来检查提供的日期是否采用上述格式。
.strftime
是否可以在此处正确使用?
最后,该方法应以正确的格式返回日期,并以错误的格式提供日期错误消息,例如:
ticket = Ticket.new
ticket.date = "2013-11-12"
=> "2013-11-12"
ticket.date = "13-11-12"
=> "Please submit the date in the format 'yyyy-mm-dd'."
有人可以指出我如何在日期上执行这些检查吗?
答案 0 :(得分:3)
Date::xmlschema对于此特定格式非常严格(请在IRB中尝试):
require 'date'
Date.xmlschema("2013-11-12") #<Date: 2013-11-12 ((2456609j,0s,0n),+0s,2299161j)>
#invalid month number:
Date.xmlschema("2013-13-12") #<ArgumentError: invalid date>
# 2 digit year:
Date.xmlschema("13-11-12") #<ArgumentError: invalid date>
# no leap year:
Date.xmlschema("2013-02-29") #<ArgumentError: invalid date>
答案 1 :(得分:1)
您可以使用begin..rescue
向用户抛出错误。require 'date'
begin
Date.parse("31-02-2010")
rescue => e
p "#{e}" #print your own custom messages and return accordingly
end
也写
救援ArgumentError
它将默认抛出错误
ArgumentError (invalid date)