He estado buscando un mecanismo de redondeo adecuado, pero nada de lo que parece parece ser exactamente lo que necesito.DateTime Round Up and Down
Necesito redondear y redondear por separado y también tengo que dar cuenta del caso cuando ya está redondeado.
necesito el siguiente redondeo a suceder
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
Básicamente lo necesito al Roundup() o RoundDown() a los 10 minutos más cercanos de manera explícita, sino que también deben dejar tiempo sin tocar si ya está en un múltiplo de 10 minutos. También me gustaría para truncar cualquier segundos para que ellos no tienen ningún efecto sobre el procedimiento de redondeo
4:50:45 -> 04:50:00 -> RoundUp() -> 4:50
¿El Alguien tiene un código útil para lograr esto.
Encontré este código en alguna parte pero redondea 5:00 -> RoundUp() -> 5:10 en lugar de dejarlo intacto porque ya es un múltiplo de 10 y no necesita redondearse. Además, no estoy seguro de cómo lo afectarían los segundos
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));
}
Espero que alguien pueda editar ese método para que funcione para mí. Gracias
Bien. Entonces tienes código de redondeo allí. ¿Por qué no lo estás modificando para que haga lo que tienes que hacer? –
¿Funcionaría? http://stackoverflow.com/questions/7029353/c-sharp-round-up-time-to-nearest-x-minutes – comecme
Su regla de redondeo no está clara. Tienes alrededor de 5:09 a 5:00 pero de 4:56 a 5:00. – Rawling