/// <summary>
 /// Add an interval of time (or some multiple thereof) to a DateTime.
 /// </summary>
 public static DateTime AddInterval(this DateTime dt, Time.IntervalType interval, int numberOfIntervals)
 {
     if (interval == Time.IntervalType.Day)
         return dt.AddDays(numberOfIntervals);
     else if (interval == Time.IntervalType.Week)
         return dt.AddDays(7 * numberOfIntervals);
     else if (interval == Time.IntervalType.Month)
         return dt.AddMonths(numberOfIntervals);
     else if (interval == Time.IntervalType.Quarter) // won't necessarily work for qtr end dates
         return dt.AddMonths(3 * numberOfIntervals);
     else if (interval == Time.IntervalType.Year)
         return dt.AddYears(numberOfIntervals);
     else
         return dt;
 }
 /// <summary>
 /// Maps a function to a timeline, starting on a given date.
 /// </summary>
 //  TODO: Get rid of Time.IntervalType
 public static Tnum TemporalMap(Func<Tnum,Tnum> fcn, Tdate startDate, Tnum intervalCount, Time.IntervalType intervalType)
 {
     return fcn(Time.IntervalsSince(startDate, startDate.AddYears(intervalCount), intervalType));
 }
 /// <summary>
 /// Subtract an interval of time from a DateTime.
 /// </summary>
 public static DateTime SubtractInterval(this DateTime dt, Time.IntervalType interval)
 {
     if (interval == Time.IntervalType.Day)
         return dt.AddDays(-1);
     else if (interval == Time.IntervalType.Week)
         return dt.AddDays(-7);
     else if (interval == Time.IntervalType.Month)  // not reversible version of AddInterval
         return dt.AddMonths(-1);
     else if (interval == Time.IntervalType.Quarter) // won't necessarily work for qtr end dates
         return dt.AddMonths(-3);
     else if (interval == Time.IntervalType.Year)
         return dt.AddYears(-1);
     else
         return dt;
 }