2011-06-24 144 views
0

如果我在2011年6月3日擁有50%的權重和2011年6月1日的權重爲50%,那麼加權平均值將爲2011年6月2日。獲取加權平均日期值?

現在,我似乎無法弄清楚如何用不平衡的權重來做這件事,因爲它不像你可以乘以一個雙倍的DateTime,並且總結結果(或者你可以嗎?)。

回答

2
DateTime dateA = ...; 
DateTime dateB = ...; 
TimeSpan difference = dateA - dateB; 
double units = difference.Ticks; 
// Do your weighted logic here on 'units'. 
DateTime average = dateA + new TimeSpan(units); 

喜歡的東西上面得到最終的輸出日期(你的想法 - 基本上需要規範的差別成可以處理的格式,即蜱,等。 )。

+0

看起來像我的贏家,謝謝! – sooprise

0

使用DateTime對象的較長時間戳。

0

您可以根據天數找到兩個日期(開始和結束)之間的差異。取適量塗抹於difference_days的重量和startdate + weightedDays

0

您能否使用DateTimeTicks屬性?喜歡的東西:

 DateTime firstDate = new DateTime(2011, 6, 5); 
     DateTime secondDate = new DateTime(2011, 6, 1); 
     double weight1 = 0.4; 
     double weight2 = 0.6; 

     var averageTicks = (firstDate.Ticks * weight1) + (secondDate.Ticks * weight2)/2; 

     DateTime averageDate = new DateTime(Convert.ToInt64(averageTicks)); 
0

不能由雙乘以日期時間,但你可以在一個標度(1〜100)設置日期1和date2的值,並找出其中的價值,你將在中間。在50/50的情況下,1與100的比例爲50。

然後您必須計算範圍內的天數。然後,您可以乘以加權小數(以百分比表示)並將其轉換爲天數。然後將該天數添加到第一個值。

由於您可以將日期轉換爲數字,因此可以實現一些非常有趣的其他方法來完成此操作。 TimeSpan是一種將數字設置爲數字的方法。

0

我想的加權平均公式將SUMPRODUCT (Weights*Dates)/sum(重量)

凡SUMPRODUCT裝置的所有因素的總和。因素是權重和date.ticks的乘積。如果權重總和= 1,則只有分子保留。