如果我在2011年6月3日拥有50%的权重和2011年6月1日的权重为50%,那么加权平均值将为2011年6月2日。获取加权平均日期值?
现在,我似乎无法弄清楚如何用不平衡的权重来做这件事,因为它不像你可以乘以一个双倍的DateTime,并且总结结果(或者你可以吗?)。
如果我在2011年6月3日拥有50%的权重和2011年6月1日的权重为50%,那么加权平均值将为2011年6月2日。获取加权平均日期值?
现在,我似乎无法弄清楚如何用不平衡的权重来做这件事,因为它不像你可以乘以一个双倍的DateTime,并且总结结果(或者你可以吗?)。
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);
喜欢的东西上面得到最终的输出日期(你的想法 - 基本上需要规范的差别成可以处理的格式,即蜱,等。 )。
使用DateTime对象的较长时间戳。
您可以根据天数找到两个日期(开始和结束)之间的差异。取适量涂抹于difference_days
的重量和startdate + weightedDays
您能否使用DateTime
的Ticks
属性?喜欢的东西:
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));
不能由双乘以日期时间,但你可以在一个标度(1〜100)设置日期1和date2的值,并找出其中的价值,你将在中间。在50/50的情况下,1与100的比例为50。
然后您必须计算范围内的天数。然后,您可以乘以加权小数(以百分比表示)并将其转换为天数。然后将该天数添加到第一个值。
由于您可以将日期转换为数字,因此可以实现一些非常有趣的其他方法来完成此操作。 TimeSpan是一种将数字设置为数字的方法。
我想的加权平均公式将SUMPRODUCT (Weights*Dates)/sum
(重量)
凡SUMPRODUCT装置的所有因素的总和。因素是权重和date.ticks的乘积。如果权重总和= 1,则只有分子保留。
看起来像我的赢家,谢谢! – sooprise