Bir grafik uygulaması için tarihleri / saatleri en yakın aralığa yuvarlamak istiyorum. Aşağıdaki gibi bir uzatma yöntemi imzası istiyorum, böylece herhangi bir doğruluk düzeyi için yuvarlama elde edilebilir:
static DateTime Round(this DateTime date, TimeSpan span);
Buradaki fikir, on dakikalık bir zaman aralığında geçersem, en yakın on dakikalık aralığa yuvarlanacağıdır. Uygulama konusunda kafamı bulamıyorum ve umarım biriniz daha önce benzer bir şey yazmış veya kullanmış olacaktır.
Bir zemin, tavan veya en yakın uygulamanın iyi olduğunu düşünüyorum.
Herhangi bir fikir?
Düzenleme: @tvanfosson & @ShuggyCoUk sayesinde, uygulama şuna benzer:
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);
}
}
Ve şöyle adlandırılır:
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));
...
Şerefe!