2011-04-18 35 views
6

可能重複:
How to deal with Rounding-off TimeSpan?圍捕C#時間跨度爲5分鐘

有(包含超過一天可能)一種能夠方便地輪AC#時間跨度向上,以便

0天23小時59分變成1天0小時0分?

0天23小時47分變成0天23小時50分?

etc?

下面是我想出迄今:

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

這似乎是一個大量的代碼的東西很簡單:(是不是有某種內建在C#中的功能,我可以使用一輪時間跨度

+0

可能重複:[?如何處理四捨五入的時間跨度(http://stackoverflow.com/q/2714221/102112) – Alex 2011-04-18 15:00:26

+0

我的問題是關於圍捕,而不是數學四捨五入。 – 2011-04-18 15:17:02

回答

18

這是?

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

或用糖粒:

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

謝謝你們,我居然跟着「粒糖」一起:) – 2011-04-18 15:09:47

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