Судя по вашей задаче вам все-таки больше всего подходит именно TimeSpan. Странно что вы его отбросили, при этом рассматривали DateTime, т.к. внутри этой структуры время определено как:
public TimeSpan TimeOfDay { get; }
К тому же TimeSpan хранит не то что бы интервал, а количество времени прошедшее с полуночи.