DateTime Округление вверх и вниз

Я искал подходящий механизм округления, но ничего из того, что я нашел, не похоже на то, что мне нужно.

Мне нужно округлить вверх и вниз отдельно, и мне также нужно учитывать случай, когда он уже округлен.

Мне нужно следующее округление

5:00 -> RoundDown() -> 5:00
5:04 -> RoundDown() -> 5:00
5:09 -> RoundDown() -> 5:00
5:10 -> RoundDown() -> 5:10

4:00 -> RoundUp() -> 4:00
4:50 -> RoundUp() -> 4:50
4:51 -> RoundUp() -> 5:00
4:56 -> RoundUp() -> 5:00 

В основном мне нужно, чтобы RoundUp ()или RoundDown ()до ближайших 10 минут явно, но это также должно оставить время нетронутым, если оно уже кратно 10 минутам. Также я хотел бы обрезать любые секунды, чтобы они не влияли на процедуру округления

4 :50 :45 -> 4 :50 :00 -> Сводка()-> 4 :50

У кого-нибудь есть удобный код для этого.

Я где-то нашел этот код, но он округляет 5 :00 -> RoundUp()-> 5 :10 вместо того, чтобы оставить его без изменений, поскольку оно уже кратно 10 и не нуждается в округлении. Также я не уверен, как на это повлияют секунды

public static DateTime RoundDateTime(this DateTime dt, int minutes, RoundingDirection direction)
{
    TimeSpan t;
    switch (direction)
    {
        case RoundingDirection.Up:
            t = (dt.Subtract(DateTime.MinValue)).Add(new TimeSpan(0, minutes, 0)); break;
        case RoundingDirection.Down:
            t = (dt.Subtract(DateTime.MinValue)); break;
        default:
            t = (dt.Subtract(DateTime.MinValue)).Add(new TimeSpan(0, minutes / 2, 0)); break;
    }
    return DateTime.MinValue.Add(new TimeSpan(0,
           (((int)t.TotalMinutes) / minutes) * minutes, 0));
}

Надеюсь, кто-нибудь сможет отредактировать этот метод, чтобы он работал на меня.Спасибо

14
задан parliament 6 July 2012 в 14:48
поделиться