ruby - 为什么 'Date.parse' 不引发无效日期字符串的异常?

标签 ruby date

我尝试创建一个方法,如果字符串是有效日期,则返回转换为日期的给定字符串,否则返回字符串。这是代码:

def check_string(string)
  if date = (Date.parse(string) rescue nil)
    return date
  end
  string
end

当字符串是:

"Análise de Novos Métodos Genéticos"

Date.parse 方法返回有效日期:

#<Date: 2017-11-01 ((2458059j,0s,0n),+0s,2299161j)>

而不是引发异常。

最佳答案

确定一个任意字符串是否对应于一个有效日期是极其复杂的。如果可能的话,我强烈建议您将您的应用程序限制为仅接受更严格、定义更明确的格式的日期。

例如,您可以使用 Date.strptime 根据特定格式测试字符串。

要了解此处实际发生的情况,我们可以构造一个最小 复制示例:

Date.parse "Análise de Novos Métodos Genéticos"
#=> #<Date: 2017-11-01 ((2458059j,0s,0n),+0s,2299161j)>

Date.parse "Nov"
#=> #<Date: 2017-11-01 ((2458059j,0s,0n),+0s,2299161j)>

库将此特定字符串解释为“1st November”,因为它包含 “Nov”

关于ruby - 为什么 'Date.parse' 不引发无效日期字符串的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47201628/

相关文章:

ruby - 在 heroku 中运行的续集迁移产生 postgres 类型错误

ruby-on-rails - 为什么 Date.today - 6.months + 6.months != Date.today?

date - 无法在 Yahoo! 中输出 pubDate管道?

c# - DateTime 转换为 Date,然后在 C# 中返回 DateTime

java - Java 时间戳/日期错误

javascript - 如何根据用户选择更改日期格式?

ruby-on-rails - Rails3 : Drop to debugging console on any exception/crash

ruby-on-rails - Rails - 如何在不重复的情况下为多个角色声明 attr_accessible

java - SQL 中的日期选择错误

ruby - 如何使用 Nginx、Passenger、Sinatra 创建多个位置