Returns a new Time if requested year can be
accommodated by Ruby’sTime class (i.e., if year is within either
1970..2038 or 1902..2038, depending on system architecture); otherwise
returns a DateTime.
# File activesupport/lib/active_support/core_ext/time/calculations.rb, line 25
def time_with_datetime_fallback(utc_or_local, year, month=1, day=1, hour=0, min=0, sec=0, usec=0)
time = ::Time.send(utc_or_local, year, month, day, hour, min, sec, usec)
# This check is needed because Time.utc(y) returns a time object in the 2000s for 0 <= y <= 138.
time.year == year ? time : ::DateTime.civil_from_format(utc_or_local, year, month, day, hour, min, sec)
rescue
::DateTime.civil_from_format(utc_or_local, year, month, day, hour, min, sec)
end