@callback after?(time1 :: integer(), time2 :: integer()) :: boolean()
@callback before?(time1 :: integer(), time2 :: integer()) :: boolean()
@callback duration(start_time :: integer(), end_time :: integer()) :: integer()
@callback during?(time :: integer(), start_time :: integer(), end_time :: integer()) :: boolean()
@callback now() :: integer()
@callback overlap?( interval1 :: {integer(), integer()}, interval2 :: {integer(), integer()} ) :: boolean()