在Date.strptime中更改yy年的世纪

时间:2017-07-17 11:27:23

标签: ruby-on-rails ruby date

我有一个"mmddyy"形式的字符串(例如:"011467")。此字符串表示出生日期。现在,我想将它解析为Date对象,所以我使用了:

Date.strptime('011467', '%m%d%y')

然而,这产生了14th January 2067,而不是预期的14th January 1967。如何改变strptime的世纪?问题是截至今天的日期,其格式为"071717",在这种情况下,17th July 2017是有效日期。 (在我们的申请中,我们预计不会超过100岁的人 - 但是,如果这样的人会在那里出现,他/她可以很容易地改变出生年份。)

1 个答案:

答案 0 :(得分:1)

Date.parse不接受格式Date.strptime

此外,您需要手动调整年份。

%w|011467 011417|.map do |s|
  Date.strptime(
    s.gsub(/\d{2}\z/) do |m|
      (m.to_i <= Date.today.year.to_s[/\d{2}\z/].to_i ? "20" : "19") << m
    end, '%m%d%Y')
}
#⇒ [
#   [0] #<Date: 1967-01-14 ((2439505j,0s,0n),+0s,2299161j)>,
#   [1] #<Date: 2017-01-14 ((2457768j,0s,0n),+0s,2299161j)>
# ]