Ruby 错误地解析了两位数的年份

标签 ruby ruby-on-rails-3

Ruby 正确解析第一个日期,但第二个日期不正确。使用 ruby​​ 1.9.3 和 2.1.2 测试。

知道如何让它始终如一地工作吗? (我们将出生日期设为 2 位数年份)

Date.strptime("10/11/89","%d/%m/%y")
=> Fri, 10 Nov 1989

Date.strptime("15/10/63","%d/%m/%y")
=> Mon, 15 Oct 2063

最佳答案

strptime 方法将文本“63”解析为 2063 年,而不是您想要的 1963 年。
这是因为该方法使用POSIX standard来决定世纪。 .

chronic gem 也有类似的问题,因为它决定了世纪,尽管有所不同。

解决方法是调整日期:

d = Date.strptime("15/10/63","%d/%m/%y")
if d > Date.today
  d = Date.new(d.year - 100, d.month, d.mday)
end

在这篇文章的评论中,Stefan 推荐了一个很好的衬垫:

d = d.prev_year(100) if d > Date.today 

如果你需要速度,你可以尝试这样优化:

d <= Date.today || d = d << 1200

关于Ruby 错误地解析了两位数的年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27058068/

相关文章:

ruby-on-rails - Rails 3 模型关注模块

ruby - 这个 vim 自定义 map 在做什么?

ruby - 这种迭代反向方法在 Ruby 中如何工作?

Ruby 正则表达式匹配逗号,但忽略括号中的逗号

css - 我需要一个 ruby​​ 中的 css 压缩器

validation - 如何在 Rails 3 中实现最小/最大验证器?

ruby-on-rails-3 - 在 Resque 中重新排队失败的作业

ruby-on-rails - 如何使用 mongoid 构建管理 UI?

ruby - Google AdWords API 错误 : invalid grant

ruby - 终端 curl : (7) Failed to connect to localhost port 3000: Connection refused