我有一个从有界范围返回步长的函数。因此,如果范围是{1,2,3,4,5,6..10}并且我想要5步,那么它将返回步长2.这并不复杂。
如果我有{.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.
然后我想将.14285捕捉到(4 * 60 * 60 = 14,400 /(24 * 60 * 60))=。16666,这相当于4小时的十进制数。
我或多或少地弄清楚了数学,但我想知道是否有更简单的方法使用DateTime来做这件事?
答案 0 :(得分: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
属性以获取您提及的其他信息。