Округление объектов DateTimeC#

Место общения программистов C#
Ответить
Anonymous
 Округление объектов DateTime

Сообщение Anonymous »

Я хочу округлить даты/время до ближайшего интервала для приложения для построения графиков. Мне нужна сигнатура метода расширения, подобная следующей, чтобы округление можно было обеспечить с любым уровнем точности:

Код: Выделить всё

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));
...
Всего хорошего!

Подробнее здесь: https://stackoverflow.com/questions/139 ... me-objects
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»