2011-04-18 11 views
6

Duplicar posibles:
How to deal with Rounding-off TimeSpan?Round Up C# TimeSpan a 5 minutos

¿Hay una manera de fácil redonda aC# TimeSpan (posible que contenga más de un día) de modo que

0 días 23h 59m se convierte en 1 días 0 h 0 m?

0 días 23h 47m se vuelve 0 días 23 h 50 m?

etc?

Esto es lo que he encontrado hasta el momento:

int remainder = span2.Minutes % 5; 
if (remainder != 0) 
{ 
    span2 = span2.Add(TimeSpan.FromMinutes(5 - remainder)); 
} 

parece una gran cantidad de código para algo bastante simple :(no hay algún tipo de construido en función de C# que puedo utilizar para lapsos redondas

+0

duplicado posible: [? ¿Cómo lidiar con Redondeo TimeSpan] (http://stackoverflow.com/q/2714221/102112) – Alex

+0

Mi pregunta fue sobre El redondeo hacia arriba, redondeo no matemática. –

Respuesta

18

aquí está:?

var ts = new TimeSpan(23, 47, 00); 
ts = TimeSpan.FromMinutes(5 * Math.Ceiling(ts.TotalMinutes/5)); 

o con un grano de azúcar:

public static class TimeSpanExtensions 
{ 
    public static TimeSpan RoundTo(this TimeSpan timeSpan, int n) 
    { 
     return TimeSpan.FromMinutes(n * Math.Ceiling(timeSpan.TotalMinutes/n)); 
    } 
} 

ts = ts.RoundTo(5); 
+0

Gracias a los dos, de hecho fui con el "grano de azúcar" uno :) –

3
static TimeSpan RoundTimeSpan(TimeSpan value) 
{ 
    return TimeSpan.FromMinutes(System.Math.Ceiling(value.TotalMinutes/5) * 5); 
}