You forgot to set the offset parameter which is defaulted to 0. It is
a fraction of a day and represents the time added to a timezone.
irb(main):020:0> x = DateTime.now
=> #<DateTime: 424140856819/172800,1/24,2299161>
irb(main):021:0> y = DateTime.new(x.year, x.month, x.day, x.hour, x.min, x.sec,
x.sec_fraction, x.offset)
=> #<DateTime: 424140864017/172800,1/172800,1/24>
irb(main):022:0> (x-y).to_f
=> -0.0416550925925926
The difference is probably just a float point precision error.
You can find more to new(which is aliased as civil) at
http://www.ruby-doc.org/core/classes...e.html#M002822