public static class Program
public static DateTime RoundToNearestMinuteProper(this DateTime dt, int rndmin, RoundingDirection directn)
TimeSpan d = TimeSpan.FromMinutes(rndmin);
Int64 modTicks = dt.Ticks % d.Ticks;
case RoundingDirection.Up:
delta = modTicks != 0 ? d.Ticks - modTicks : 0;
case RoundingDirection.Down:
case RoundingDirection.Nearest:
bool roundUp = modTicks > (d.Ticks / 2);
var offset = roundUp ? d.Ticks : 0;
delta = offset - modTicks;
return new DateTime(dt.Ticks + delta, dt.Kind);
public enum RoundingDirection
public static void Main()
var dt = new DateTime(2018, 08, 03, 10, 7, 31, 000);
Console.WriteLine(dt.RoundToNearestMinuteProper(15, RoundingDirection.Up));
Console.WriteLine(dt.RoundToNearestMinuteProper(15, RoundingDirection.Down));
Console.WriteLine(dt.RoundToNearestMinuteProper(15, RoundingDirection.Nearest));