On Tue, May 4, 2010 at 8:05 AM, Xavier Noria <fxn / hashref.com> wrote:
> Does anyone have a precise statement about the years supported by
> Time.utc? That is, when does Time.utc(y) gives you a time object in
> year y?

I believe that this is both platform and ruby version dependent.

At least for Ruby 1.8.x the internal representation in time is a
signed integer (not a Ruby Integer or Fixnum but a 'hardware' integer)
representing the number of seconds since (or before for a negative
value) the posix epoch Thu Jan 01 00:00:00 UTC 1970

On 32 bit platforms, this allows times between Fri Dec 13 20:45:52 UTC
1901 and Tue Jan 19 03:14:07 UTC 2038 to be represented as Time
objects.

On 64 bit platforms, the range is much wider, I'm not sure exactly
what it is since you can't seem to add or subtract (2**63 -1) to a
Time representing the epoch in Ruby 1.8.6 or 1.8.7 without running
into an internal gmtime when you inspect the resulting value.  But it
can at least represent times between:

Sun Jul 19 17:33:52 UTC -1141705158 and Sun Jun 13 06:26:08 UTC 1141709097

Which might not stretch back to the current cosmological theories
about the time of the Big Bang, but should be wide enough represent
most times 'iinteresting' to Humans.

Time.utc(y) seems to interpret a y between 0 and 38 as being
2000..2038).  So it will return a Time object whose year is the passed
parameter + 2000.

So for Ruby 1.8.x compiled with 32 bit integers

Time.utc(y).year == y if y is between 1902 and 2038

And when compiled with 64 bit integers it's true if  y is between
    some negative value no larger than -1141705157 and -1
or between
    39 and some positive value at least  1141709097

Ruby 1.9.2 has changed the internal representation, it looks like it
uses a Ruby integer object internally, so the range expands to
bignums. So I think the answer for 1.9.2 is that you can use any
integer value for year.


-- 
Rick DeNatale

Blog: http://talklikeaduck.denhaven2.com/
Github: http://github.com/rubyredrick
Twitter: @RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: http://www.linkedin.com/in/rickdenatale