DateTime now = DateTime.Now; int second = 0; // round to nearest 5 second mark if (now.Second % 5 > 2.5) { // round up second = now.Second + (5 - (now.Second % 5)); } else { // round down second = now.Second - (now.Second % 5); } DateTime rounded = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, second); DateTime now = DateTime.Now; DateTime rounded = new DateTime(((now.Ticks + 25000000) / 50000000) * 50000000); public static TimeSpan Round(this TimeSpan time, TimeSpan roundingInterval, MidpointRounding roundingType) { return new TimeSpan( Convert.ToInt64(Math.Round( time.Ticks / (decimal)roundingInterval.Ticks, roundingType )) * roundingInterval.Ticks ); } public static TimeSpan Round(this TimeSpan time, TimeSpan roundingInterval) { return Round(time, roundingInterval, MidpointRounding.ToEven); } public static DateTime Round(this DateTime datetime, TimeSpan roundingInterval) { return new DateTime((datetime - DateTime.MinValue).Round(roundingInterval).Ticks); } new DateTime(2010, 11, 4, 10, 28, 27).Round(TimeSpan.FromMinutes(1)); // rounds to 2010.11.04 10:28:00 new DateTime(2010, 11, 4, 13, 28, 27).Round(TimeSpan.FromDays(1)); // rounds to 2010.11.05 00:00 new TimeSpan(0, 2, 26).Round(TimeSpan.FromSeconds(5)); // rounds to 00:02:25 new TimeSpan(3, 34, 0).Round(TimeSpan.FromMinutes(37); // rounds to 03:42:00...for all your round-to-37-minute needs static int Round(int n, int r) { if ((n % r) <= r / 2) { return n - (n % r); } return n + (r - (n % r)); } DateTime rounded = roundTo5Secs (DateTime.Now); secBase = now.Second / 5; secExtra = now.Second % 5; if (secExtra > 2) { return new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, secBase + 5); } return new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, secBase); // truncate to multiple of 5 int second = 5 * (int) (now.Second / 5); DateTime dt = new DateTime(..., second); // round-up if necessary if (now.Second % 5 > 2.5) { dt = dt.AddSeconds(5); }