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/