In article <1084509554.595111.510.nullmailer / picachu.netlab.jp>,
  matz / ruby-lang.org (Yukihiro Matsumoto) writes:

> 1.9 will preserve this information in the near future.
>
> 							matz.
> --- time.c	30 Apr 2004 11:10:02 -0000	1.100
> +++ time.c	14 May 2004 04:38:36 -0000
> @@ -1904,3 +1904,4 @@ time_mdump(time)
>      p = 0x1          << 31 | /*  1 */
> -	tm->tm_year  << 14 | /* 17 */
> +	tobj->gmt    << 30 | /*  1 */
> +	tm->tm_year  << 14 | /* 16 */
>  	tm->tm_mon   << 10 | /*  4 */

I found that this change causes Marshal.load error if GMT time is sent
from 1.9 to 1.8.1.

% ruby -e 'Marshal.dump(Time.new.getgm, STDOUT)'|ruby-1.8.1 -e 'p Marshal.load(STDIN)'       
-e:1:in `_load': time out of range (ArgumentError)
        from -e:1:in `load'
        from -e:1

% ruby -v
ruby 1.9.0 (2004-05-15) [i686-linux]
% ruby-1.8.1 -v
ruby 1.8.1 (2003-12-25) [i686-linux]

Why don't you use the bit 31, which is previously filled by 1 ?
-- 
Tanaka Akira