C#DateTime:按双倍时间缩放

C#DateTime:按双倍时间缩放,c#,datetime,C#,Datetime,我有一个函数,它返回一个有界范围内的步长。因此,如果范围是{1,2,3,4,5,6..10},我需要5个步骤,它将返回2的步骤大小。这没那么复杂 如果我有{.1、.2、.3、.4….1}并且我想要7步,那么步长是0.14285。然后我想将0.14285转换为最接近的相关时间度量。在本例中,14285表示小数天。例如,整数1表示一整天,0.25表示6小时 .14285 = 12,342.24 seconds = 205.704 Minutes = 3.42 Hours ~= 4 hours. 然

我有一个函数,它返回一个有界范围内的步长。因此,如果范围是{1,2,3,4,5,6..10},我需要5个步骤,它将返回2的步骤大小。这没那么复杂

如果我有{.1、.2、.3、.4….1}并且我想要7步,那么步长是0.14285。然后我想将0.14285转换为最接近的相关时间度量。在本例中,14285表示小数天。例如,整数1表示一整天,0.25表示6小时

.14285 = 12,342.24 seconds = 205.704 Minutes = 3.42 Hours ~= 4 hours.
然后我想将.14285捕捉到(4*60*60=14400/(24*60*60))=16666,这是相当于4小时的十进制数


我或多或少已经算出了数学,但我想知道是否有一种更简单的方法可以用DateTime的东西来解决这个问题?

我建议你把问题弄清楚;我花了一段时间才意识到你提到的
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.14285等于4小时?我不明白。如果整数1等于一天,.25等于6小时。14285等于3.42小时。然后我把时间缩短到4个小时,效果非常好。我想买点像这样的东西,你送了。谢谢