如何检查是否提供了正确的日期格式

时间:2019-04-29 14:13:18

标签: ruby validation date

我目前正在研究功能完善的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'."

有人可以指出我如何在日期上执行这些检查吗?

2 个答案:

答案 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)