2010-11-18 75 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