From: gabriel.sobrinho@... Date: 2015-01-21T20:22:23+00:00 Subject: [ruby-core:67730] [ruby-trunk - Bug #10767] [Open] Time.local doesn't raise an exception during the dead hour on DST Issue #10767 has been reported by Gabriel Sobrinho. ---------------------------------------- Bug #10767: Time.local doesn't raise an exception during the dead hour on DST https://bugs.ruby-lang.org/issues/10767 * Author: Gabriel Sobrinho * Status: Open * Priority: Normal * Assignee: * ruby -v: ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux-gnu] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- At the begin of DST ruby is accepting the 0 hour which in fact doesn't exists: Time.local(2014, 10, 19, 0, 30) #=> 2014-10-19 01:30:00 -0200 Time.local(2014, 10, 19, 1, 30) #=> 2014-10-19 01:30:00 -0200 Time.local(2014, 10, 19, 2, 30) #=> 2014-10-19 02:30:00 -0200 In fact it is returning the next hour for some reason, causing a really strange behaviour: Time.local(2014, 10, 19, 0, 30) == Time.local(2014, 10, 19, 1, 30) #=> true I think it makes more sense to raise an exception as happens when you specify a invalid month, day, hour, minute or second: Time.local(2014, 10, 19, 1, 60) # 60 minutes doesn't exists ArgumentError: invalid date Time.local(2014, 10, 19, 25, 30) # 25 hours doesn't exists ArgumentError: invalid date Makes sense? I would be happy to provide a patch. -- https://bugs.ruby-lang.org/