Я искал подходящий механизм округления, но ничего, что я нахожу, кажется, именно то, что мне нужно.
Мне нужно округлить и округлить отдельно, и мне также нужно учитывать случай, когда он уже закруглен.
Мне нужно следующее округление
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 → RoundUp() → 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));
}
Надеюсь, кто-то может отредактировать этот метод, чтобы он работал у меня. Благодаря