Date Ruby

class Date
  def to_gm_time
    to_time(new_offset, :gm)
  end
  def to_local_time
    to_time(new_offset(DateTime.now.offset-offset), :local)
  end
  private
  def to_time(dest, method)
    usec = (dest.sec_fraction * 60 * 60 * 24 * (10**6)).to_i
    Time.send(method, dest.year, dest.month, dest.day, dest.hour, dest.min,
              dest.sec, usec)
  end
end
puts (datetime = DateTime.new(1990, 10, 1, 22, 16, Rational(41,2))).to_s
puts datetime.to_gm_time
puts datetime.to_local_time
puts time.to_datetime < datetime
puts time < datetime.to_gm_time
puts (time.to_datetime - datetime).to_f
puts time - datetime.to_gm_time