我想将日期/时间舍入到图表应用程序的最近间隔。我想扩展方法签名一样遵循,这样的舍入可来达到的精度的任何级别:舍入日期时间对象
static DateTime Round(this DateTime date, TimeSpan span);
的想法是,如果我通过在十分钟的时间跨度,它会舍入到最接近十分钟时间间隔。我无法在实施过程中找到自己的头,并希望你们中的一个人能够写下或使用过类似的东西。
我认为楼层,天花板或最近的实施是好的。
任何想法?
编辑:感谢@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));
...
干杯!
这里的某些实现的效果也会有所帮助:http://stackoverflow.com/questions/766626/is-there-一个更好的方式在一个C到四舍五入日期时间到最近5秒 – 2009-09-08 12:27:05
可能的重复[是否有更好的方法来修剪日期时间到一个特定的精度?](http: //sackoverflow.com/questions/152774/is-there-a-better-way-to-trim-a-datetime-to-a-specific-precision) – 2010-05-25 17:18:27
不要忘了将原始的DateTimeKind添加到新创建的日期前:new DateTime(ticks * span.Ticks,date.Kind); – 2013-11-14 17:29:19