const long LNG_OneMinuteInTicks = 600000000;
public static DateTime Round(DateTime dateTime, int numberMinutes = 1)
long roundedMinutesInTicks = LNG_OneMinuteInTicks * numberMinutes;
long remainderTicks = dateTime.Ticks % roundedMinutesInTicks;
if (remainderTicks < roundedMinutesInTicks / 2)
return dateTime.AddTicks(-remainderTicks);
return dateTime.AddTicks(roundedMinutesInTicks - remainderTicks);
public static void Main()
var d = new DateTime(2018, 1, 1, 0, 1, 59, 999);
for (int i = 0; i < 100; i++)
d = d.AddSeconds(29).AddMilliseconds(i * 10);
var rounded = Round(d, roundingMinutes);
Console.WriteLine(String.Format("{0:HH:mm:ss.fff}, Rounded: {1:HH:mm:ss.fff}", d, rounded));