2013-05-28 50 views
2

是否有將日期時間四捨五入到上一季度的功能?DotNet四捨五入倒數日期時間到最後15分鐘

例...

08:03:00 becomes 08:00:00 

08:14:00 becomes 08:00:00 

08:15:00 stays 08:15:00 

08:16:00 becomes 08:15:00 

08:29:00 becomes 08:15:00 

08:45:00 stays 08:45:00 

08:55:00 becomes 08:45:00 

09:01:00 becomes 09:00:00 

我已經寫了下面的功能,但它返回下一季度 ...

private DateTime RoundUpToPreviousQuarter(DateTime date, TimeSpan d) 
{ 
     return new DateTime(((date.Ticks + d.Ticks - 1)/d.Ticks) * d.Ticks); 
} 

// call the method 
this.RoundUp(time, TimeSpan.FromMinutes(15)); 

知道的任何投入。

回答

7

應用模15日期時間的分鐘屬性並從相同的屬性

DateTime dt = new DateTime(2013,5,28, 15, 59,0); 
dt = dt.AddMinutes(-(dt.Minute % 15)); 

減去該值在這個例子中我已經創建了一個零秒日期時間。如果您還需要刪除秒

DateTime dt = new DateTime(2013,5,28, 15, 59,45); 
dt = dt.AddMinutes(-(dt.Minute % 15)).AddSeconds(-dt.Second); 
+0

更好的解決方案 –

+0

那秒鐘呢?他們會保持不變,我懷疑OP是否希望這樣做。 – SergeyS

+0

秒不需要。只有幾分鐘。 –

3

改變你的方法:

private DateTime RoundUpToPreviousQuarter(DateTime date, TimeSpan d) 
{ 
    return new DateTime(((date.Ticks)/d.Ticks) * d.Ticks); 
} 

經過這個工作對我來說。

+0

將失敗08:45:00 – SergeyS

+1

這包含一個關閉一個錯誤。應該是'(date.Ticks/d.Ticks)* d.Ticks'。請參閱http://stackoverflow.com/a/10100259 – dtb

+0

糟糕!現在更改... – TheKingDave

相關問題