Tôi muốn làm tròn ngày/giờ đến 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ý phương pháp khuyến nông như sau để làm tròn có thể đạt được đối với bất kỳ mức độ chính xác:Làm tròn đối tượng DateTime
static DateTime Round(this DateTime date, TimeSpan span);
Ý tưởng là nếu tôi vượt qua trong một khoảng thời gian mười phút, nó sẽ tròn đến gần nhất khoảng mười phút. Tôi không thể có được đầu của tôi xung quanh việc thực hiện và hy vọng một trong các bạn sẽ có văn bản hoặc sử dụng một cái gì đó tương tự trước đây.
Tôi nghĩ rằng sàn, trần hoặc gần nhất là tốt.
Bất kỳ ý tưởng nào?
Edit: Nhờ @tvanfosson & @ShuggyCoUk, việc thực hiện 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 là 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));
...
Cheers!
Một số việc triển khai ở đây có thể giúp quá: http://stackoverflow.com/questions/766626/is-there- a-tốt-way-in-c-to-round-a-datetime-to-the-gần-5-giây –
có thể trùng lặp của [Có cách nào tốt hơn để cắt một DateTime thành một độ chính xác cụ thể không?] (http: //stackoverflow.com/questions/152774/is-there-a-better-way-to-trim-a-datetime-to-a-specific-precision) –
Đừng quên thêm DateTimeKind ban đầu vào ngày tạo mới được tạo : DateTime mới (ticks * span.Ticks, date.Kind); –