2017-07-17 3 views
1

私は"mmddyy"のような文字列を持っています(例:"011467")。この文字列は、生年月日を表します。今、私は、Dateオブジェクトにそれを解析したいと思いますので、私は使用していますDate.strptimeでyy年の世紀を変更します

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

をしかし、これは代わりに期待14th January 1967の、14th January 2067を生産しました。どのように私はstrptimeの世紀を変えるのですか?問題は今日までの日付であり、形式は"071717"であり、この場合17th July 2017は有効な日付です。 (私たちのアプリケーションでは、100歳以上の人はいないと思いますが、その人がそこにいたら、容易に出生年を変えることができます)。

答えて

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)> 
# ] 
関連する問題