You may be closer to a solution than you think you are: TimeSpan already supports "rollover," where a value less than, or more than, the "standard" ranges of month, day, hour, minute, values automatically increments/decrements, or decrements the next "higher" category. Try it:
TimeSpan ts1 = new TimeSpan(22, 47, 90, 122);
TimeSpan ts2 = new TimeSpan(-12, -1, -122, 0, 0);
However, DateTime does not implement automatic rollover.