2010-11-18 32 views
2

我有一個函數,從有界範圍返回一個步長。所以如果範圍是{1,2,3,4,5,6..10}並且我想要5個步驟,它將返回2的步長。這並不複雜。C#日期時間:縮放雙倍到時間

如果我有{.1,.2,.3,.4 .... 1}並且我想要7個步驟,那麼步長爲0.14285。然後我想將0.14285轉換爲最接近的相關時間測量值。在這種情況下.14285代表分數日。例如,整數1代表一整天,而.25代表6小時。

.14285 = 12,342.24 seconds = 205.704 Minutes = 3.42 Hours ~= 4 hours. 

我然後想捕捉0.14285〜(4 * 60 * 60 = 14400 /(24 * 60 * 60))= 0.16666這是4小時十進制等效值。

我或多或少有數學計算出來,但我想知道是否有更簡單的方法來做到這一點使用DateTime的東西?

+2

問題:爲什麼0.14285等於4小時?我不明白。 – BeemerGuy 2010-11-18 02:51:43

+0

如果整數1等於一天,則.25等於6小時。 .14285則等於3.42小時。然後我四捨五入四小時。 – John 2010-11-18 03:04:29

回答

4

我確實建議您讓問題更清楚;我花了一段時間才意識到你所指的0.14285代表了天的一小部分

您可以使用這樣的事情:

// {03:25:42.24} 
TimeSpan unSnapped = TimeSpan.FromDays(0.14285); 

// {04:00:00} : Round up the hours and construct a TimeSpan from it 
TimeSpan snapped = TimeSpan.FromHours(Math.Ceiling(unSnapped.TotalHours)); 

// 0.166666666 
double snappedFractionOfADay = snapped.TotalDays; 

您可以檢查的時間跨度TotalXXX屬性來獲取其他信息,您提到,如果需要的話。

+0

這工作很好。我正在爲這樣的事情而跳槽,並且你交付了。謝謝! – John 2010-11-18 04:15:42