Tôi muốn làm tròn ngày / giờ thành khoảng thời gian gần nhất cho một ứng dụng biểu đồ. Tôi muốn một chữ ký của phương thức mở rộng như sau để việc làm tròn có thể được thực hiện cho bất kỳ mức độ chính xác nào:
static DateTime Round(this DateTime date, TimeSpan span);
Ý tưởng là nếu tôi vượt qua trong khoảng thời gian mười phút, nó sẽ làm tròn đến khoảng thời gian mười phút gần nhất. Tôi không thể hiểu được việc triển khai và tôi hy vọng một trong số các bạn sẽ viết hoặc sử dụng một cái gì đó tương tự trước đây.
Tôi nghĩ rằng việc triển khai sàn, trần hoặc gần nhất đều ổn.
Bất kỳ ý tưởng?
Chỉnh sửa: Cảm ơn @tvanfosson & @ShuggyCoUk, việc triển khai trông như thế này:
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);
}
}
Và được gọi như vậy:
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));
...
Chúc mừng!