Current behavior:
>> ( Time.now.years_since 5 ).to_s(:long)
=> "March 03, 2012 18:30"
>> ( Time.now.years_since 32 ).to_s(:long)
ArgumentError: time out of range
Enhanced fallback behavior -- Time calculations now return DateTime when out of range of Time class:
>> ( Time.now.years_since 5 ).to_s(:long)
=> "March 03, 2012 18:30"
>> ( Time.now.years_since 32 ).to_s(:long)
=> "March 03, 2039 18:30"
>> ( Time.now.years_since 5 ).class
=> Time
>> ( Time.now.years_since 32 ).class
=> DateTime
Fallback behavior made possible by the addition of class methods #utc_time and #local_time:
>> ( Time.utc_time(2005) ).to_s(:long)
=> "January 01, 2005 00:00"
>> ( Time.utc_time(2039) ).to_s(:long)
=> "January 01, 2039 00:00"
>> ( Time.utc_time(2005) ).class
=> Time
>> ( Time.utc_time(2039) ).class
=> DateTime
Tests included.