## Introduction

Rounding a `DateTime`

up (or down) to the nearest number of minutes seems a simple requirement, but is surprisingly unintuitive due to the relationships and different properties of `DateTime`

and `TimeSpan`

classes.

I've come across some pretty dreadful examples on the web, so thought I'd post a much simpler (and faster) one.

## Using the code

This function accepts the number of minutes to be rounded to.

public enum eRoundingDirection { up, down, nearest }
public DateTime RoundDateTime(DateTime dt, int minutes, eRoundingDirection direction)
{
TimeSpan t;
switch (direction)
{
case eRoundingDirection.up:
t = (dt.Subtract(DateTime.MinValue)).Add(new TimeSpan(0, minutes, 0)); break;
case eRoundingDirection.down:
t = (dt.Subtract(DateTime.MinValue)); break;
default:
t = (dt.Subtract(DateTime.MinValue)).Add(new TimeSpan(0, minutes / 2, 0)); break;
}
return DateTime.MinValue.Add(new TimeSpan(0,
(((int)t.TotalMinutes) / minutes) * minutes, 0));
}

## Points of interest

Why use "default:" instead of "nearest"? Simply because it saves defining a default value for the `TimeSpan`

.

Integer math helps keep this function speedy, and avoids those tricky rounding errors in the milliseconds.