-
绝地无双
DateTime RoundUp(DateTime dt, TimeSpan d){ return new DateTime((dt.Ticks + d.Ticks - 1) / d.Ticks * d.Ticks, dt.Kind);}例:var dt1 = RoundUp(DateTime.Parse("2011-08-11 16:59"), TimeSpan.FromMinutes(15));// dt1 == {11/08/2011 17:00:00}var dt2 = RoundUp(DateTime.Parse("2011-08-11 17:00"), TimeSpan.FromMinutes(15));// dt2 == {11/08/2011 17:00:00}var dt3 = RoundUp(DateTime.Parse("2011-08-11 17:01"), TimeSpan.FromMinutes(15));// dt3 == {11/08/2011 17:15:00}
-
手掌心
提出了一种不涉及相乘和除法 的解决方案long。public static DateTime RoundUp(this DateTime dt, TimeSpan d){ var modTicks = dt.Ticks % d.Ticks; var delta = modTicks != 0 ? d.Ticks - modTicks : 0; return new DateTime(dt.Ticks + delta, dt.Kind);}public static DateTime RoundDown(this DateTime dt, TimeSpan d){ var delta = dt.Ticks % d.Ticks; return new DateTime(dt.Ticks - delta, dt.Kind);}public static DateTime RoundToNearest(this DateTime dt, TimeSpan d){ var delta = dt.Ticks % d.Ticks; bool roundUp = delta > d.Ticks / 2; var offset = roundUp ? d.Ticks : 0; return new DateTime(dt.Ticks + offset - delta, dt.Kind);}用法:var date = new DateTime(2010, 02, 05, 10, 35, 25, 450); // 2010/02/05 10:35:25var roundedUp = date.RoundUp(TimeSpan.FromMinutes(15)); // 2010/02/05 10:45:00var roundedDown = date.RoundDown(TimeSpan.FromMinutes(15)); // 2010/02/05 10:30:00var roundedToNearest = date.RoundToNearest(TimeSpan.FromMinutes(15)); // 2010/02/05 10:30:00
-
临摹微笑
void Main(){ var date1 = new DateTime(2011, 8, 11, 16, 59, 00); date1.Round15().Dump(); var date2 = new DateTime(2011, 8, 11, 17, 00, 02); date2.Round15().Dump(); var date3 = new DateTime(2011, 8, 11, 17, 01, 23); date3.Round15().Dump(); var date4 = new DateTime(2011, 8, 11, 17, 00, 00); date4.Round15().Dump();}public static class Extentions{ public static DateTime Round15(this DateTime value) { var ticksIn15Mins = TimeSpan.FromMinutes(15).Ticks; return (value.Ticks % ticksIn15Mins == 0) ? value : new DateTime((value.Ticks / ticksIn15Mins + 1) * ticksIn15Mins); }}结果:8/11/2011 5:00:00 PM8/11/2011 5:15:00 PM8/11/2011 5:15:00 PM8/11/2011 5:00:00 PM