65.9K
CodeProject is changing. Read more.
Home

Extension Methods in C#

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0 vote)

Apr 19, 2011

CPOL
viewsIcon

8406

Here is a methods that I use to round DateTime class to the next minute interval./// /// Rounds a date value to a given minute interval/// /// Original time value/// Number of minutes to round up or down...

Here is a methods that I use to round DateTime class to the next minute interval.
/// <summary>
/// Rounds a date value to a given minute interval
/// </summary>
/// <param name="time">Original time value</param>
/// <param name="minuteInterval">Number of minutes to round up or down to</param>
/// <returns></returns>
public static DateTime RoundDateToMinuteInterval(this DateTime time, int minuteInterval, RoundingDirection direction = RoundingDirection.RoundUp)
{
  if (minuteInterval == 0)
    return time;

  decimal interval = (decimal)minuteInterval;
  decimal actMinute = (decimal)time.Minute;

  if (actMinute == 0.00M)
    return time;

  int newMinutes = 0;
  switch (direction)
  {
    case RoundingDirection.Round:
      newMinutes = (int)(Math.Round(actMinute / interval, 0) * interval);
      break;
    case RoundingDirection.RoundDown:
      newMinutes = (int)(Math.Truncate(actMinute / interval) * interval);
      break;
    case RoundingDirection.RoundUp:
      newMinutes = (int)(Math.Ceiling(actMinute / interval) * interval);
      break;
  }

  // *** strip time
  time = time.AddMinutes(time.Minute * -1);
  time = time.AddSeconds(time.Second * -1);
  time = time.AddMilliseconds(time.Millisecond * -1);

  // *** add new minutes back on
  return time.AddMinutes(newMinutes);
}

public enum RoundingDirection
{
  RoundUp,
  RoundDown,
  Round
}
If you have a DateTime that is:
DateTime d = new DateTime(2011, 4, 19, 10, 20, 0);
// And you call the function as this.
DateTime roundUpDateTime.RoundDateToMinuteInterval(15);
// roundUpDateTime will be - 2011-04-19 10:30:00