From: corey.woodcox@... Date: 2014-12-22T17:38:46+00:00 Subject: [ruby-core:67039] [ruby-trunk - Bug #10614] strpdate and Leap Days Issue #10614 has been updated by Corey Woodcox. Tsuyoshi Sawada wrote: > `'02/29/2012'` clearly does not match `'%m/%d'`. What else would you expect than an argument error? >> Date.strptime('01/01/2014', '%m/%d') => # It functions as expected (ignoring the year) when given a year in the input, but not the format string. The underlying issue here, I think, is that it's assuming this year when the year is not specified. This would normally be fine, except that it can cause strange behavior when parsing a date that is a leap day. If I change my system time to 2016 (which is a leap year) then this happens: >> Time.now => 2016-01-01 00:00:00 -0500 >> Date.strptime('02/29/2012', '%m/%d') => # ---------------------------------------- Bug #10614: strpdate and Leap Days https://bugs.ruby-lang.org/issues/10614#change-50562 * Author: Corey Woodcox * Status: Open * Priority: Normal * Assignee: * Category: * Target version: * ruby -v: ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-darwin14.0] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- I'm experiencing an issue parsing dates and leap days. When the format string includes the year, everything works as expected: ~~~ >> Date.strptime('02/29/2012', '%m/%d/%Y') => # ~~~ Parsing a date without a year assumes this year: ~~~ >> Date.strptime('01/01', '%m/%d') => # ~~~ Here's my issue, parsing a leap day without a year assumes I mean this year, and this year is not a leap year: ~~~ >> Date.strptime('02/29/2012', '%m/%d') ArgumentError: invalid date ~~~ Thinking about it now, I'm not sure what the expected behavior should be. Python assumes 1900 under the same circumstances, and it doesn't throw an exception. -- https://bugs.ruby-lang.org/