我希望将日期/时间四舍五入到图表应用程序的最近间隔。我想一个扩展方法签名如下,以便四舍五入可以实现任何水平的准确性:
static DateTime Round(this DateTime date, TimeSpan span);
这个想法是,如果我在10分钟的时间跨度内通过,它将四舍五入到最接近的10分钟间隔。我无法理解这个实现,我希望你们之中有人以前写过或者使用过类似的东西。
我认为无论是地板,天花板或最近的执行是好的。
有什么想法吗?
编辑: 感谢@tvanfosson &@ShuggyCouk,实现看起来是这样的:
public static class DateExtensions {
public static DateTime Round(this DateTime date, TimeSpan span) {
long ticks = (date.Ticks + (span.Ticks / 2) + 1)/ span.Ticks;
return new DateTime(ticks * span.Ticks);
}
public static DateTime Floor(this DateTime date, TimeSpan span) {
long ticks = (date.Ticks / span.Ticks);
return new DateTime(ticks * span.Ticks);
}
public static DateTime Ceil(this DateTime date, TimeSpan span) {
long ticks = (date.Ticks + span.Ticks - 1) / span.Ticks;
return new DateTime(ticks * span.Ticks);
}
}
它的名字是这样的:
DateTime nearestHour = DateTime.Now.Round(new TimeSpan(1,0,0));
DateTime minuteCeiling = DateTime.Now.Ceil(new TimeSpan(0,1,0));
DateTime weekFloor = DateTime.Now.Floor(new TimeSpan(7,0,0,0));
...
干杯!