static DateTime RoundUp(DateTimeOffset dt, TimeSpan d)
return new DateTime(((dt.Ticks + d.Ticks - 1) / d.Ticks) * d.Ticks);
public static void Main()
Console.WriteLine(RoundUp(DateTimeOffset.Parse("2011-08-11 17:00"), TimeSpan.FromMinutes(15)).ToString("s"));
Console.WriteLine(RoundUp(DateTimeOffset.Parse("2011-08-11 17:01"), TimeSpan.FromMinutes(15)).ToString("s"));
Console.WriteLine(RoundUp(DateTimeOffset.Parse("2011-08-11 17:15"), TimeSpan.FromMinutes(15)).ToString("s"));
Console.WriteLine(RoundUp(DateTimeOffset.Parse("2011-08-11 17:16"), TimeSpan.FromMinutes(15)).ToString("s"));
Console.WriteLine(RoundUp(DateTimeOffset.Parse("2011-08-11 17:29"), TimeSpan.FromMinutes(15)).ToString("s"));
Console.WriteLine(RoundUp(DateTimeOffset.Parse("2011-08-11 17:30"), TimeSpan.FromMinutes(15)).ToString("s"));
Console.WriteLine(RoundUp(DateTimeOffset.Parse("2011-08-11 17:31"), TimeSpan.FromMinutes(15)).ToString("s"));
Console.WriteLine(RoundUp(DateTimeOffset.Parse("2011-08-11 17:44"), TimeSpan.FromMinutes(15)).ToString("s"));
Console.WriteLine(RoundUp(DateTimeOffset.Parse("2011-08-11 17:45"), TimeSpan.FromMinutes(15)).ToString("s"));
Console.WriteLine(RoundUp(DateTimeOffset.Parse("2011-08-11 17:46"), TimeSpan.FromMinutes(15)).ToString("s"));
Console.WriteLine(RoundUp(DateTimeOffset.Parse("2011-08-11 17:00"), TimeSpan.FromMinutes(30)).ToString("s"));
Console.WriteLine(RoundUp(DateTimeOffset.Parse("2011-08-11 17:01"), TimeSpan.FromMinutes(30)).ToString("s"));
Console.WriteLine(RoundUp(DateTimeOffset.Parse("2011-08-11 17:29"), TimeSpan.FromMinutes(30)).ToString("s"));
Console.WriteLine(RoundUp(DateTimeOffset.Parse("2011-08-11 17:30"), TimeSpan.FromMinutes(30)).ToString("s"));
Console.WriteLine(RoundUp(DateTimeOffset.Parse("2011-08-11 17:31"), TimeSpan.FromMinutes(30)).ToString("s"));