like Time::Duration, but an object