Time manipulation in ruby

ruby, time

Solution

A `Time` is a number of seconds since an epoch whereas a `DateTime` is a number of days since an epoch which is why adding `1` to a `DateTime` adds a whole day. You can however add fractions of a day, for example

d = DateTime.now
d + Rational(10, 86400)

Will add 10 seconds to `d` (since there are 86400 seconds in a day).

If you are using Rails, Active Support adds some helper methods and you can do

d + 20.minutes + 10.seconds

Which will do the right thing is `d` is a `DateTime` or a `Time`. You can use Active Support on its own, and these days you can pull in just the bits you need. I seem to recall that this stuff is in `activesupport/duration`. I believe there are a few other gems that offer help with time handling too.

Problem

I want to create a DateTime instance that lies 20 minutes and 10 seconds in the future. I tried around with Time and DateTime in irb, but can't seem to figure out a way that really makes sense. I can only add days to DateTime objects and only add seconds to the Time objects. Isn't there a better way than to always convert the time I want to add into seconds?

Original source