2011-06-24 145 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,则只有分子保留。