From: merch-redmine@... Date: 2020-06-10T20:40:17+00:00 Subject: [ruby-core:98722] [Ruby master Feature#16031] Raise ArgumentError when creating Time objects with invalid day of month, instead of rolling into next month Issue #16031 has been updated by jeremyevans0 (Jeremy Evans). Backport deleted (2.5: UNKNOWN, 2.6: UNKNOWN) ruby -v deleted (ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin18]) Subject changed from Inconsistency between Date::strptime and Time::strptime at the end of a month to Raise ArgumentError when creating Time objects with invalid day of month, instead of rolling into next month Tracker changed from Bug to Feature This is not related to `strptime` specifically, this is how Time behaves generally: ```ruby Time.local(2020, 2, 31) # => 2020-03-02 00:00:00 -0800 Time.parse("2020-02-31") # => 2020-03-02 00:00:00 -0800 ``` This behavior isn't a bug, it is by design: https://github.com/ruby/ruby/blob/ee35a4dad30eaf74064d5c38bfdfb3550998bb8f/time.c#L3056-L3076 So I'm switching this to a feature request to change Time to raise ArgumentError for invalid day of month, instead of rolling into the next month. ---------------------------------------- Feature #16031: Raise ArgumentError when creating Time objects with invalid day of month, instead of rolling into next month https://bugs.ruby-lang.org/issues/16031#change-86078 * Author: aliism (Ali Ismayilov) * Status: Open * Priority: Normal ---------------------------------------- When parsing an invalid date, like February 31 or November 31, I get different results from Date and Time classes. ``` ruby require 'date' require 'time' Date.strptime('2019-02-31', '%Y-%m-%d') # Traceback (most recent call last): # 5: from /Users/ali/.rbenv/versions/2.6.3/bin/irb:23:in `
' # 4: from /Users/ali/.rbenv/versions/2.6.3/bin/irb:23:in `load' # 3: from /Users/ali/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb:11:in `' # 2: from (irb):5 # 1: from (irb):5:in `strptime' # ArgumentError (invalid date) Time.strptime('2019-02-31', '%Y-%m-%d') # => 2019-03-03 00:00:00 +0100 ``` I'd expect Time class to throw ArgumentError, just like the Date class. -- https://bugs.ruby-lang.org/ Unsubscribe: