Получение средневзвешенного значения даты? - PullRequest
0 голосов
/ 24 июня 2011

Если у меня 50% веса на 3 июня 2011 года и 50% веса на 1 июня 2011 года, средневзвешенное значение будет 2 июня 2011 года.

Теперь я не могу понять, как я могу сделать это с неравными весами, так как вы не можете умножить DateTime на двойное и суммировать результаты (или можете?).

Ответы [ 7 ]

2 голосов
/ 24 июня 2011
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 голосов
/ 24 января 2019

У меня была такая же проблема, только с деньгами (денежными потоками), что означает, что существует сложная \ дисконтирующая скорость роста \ затухание стоимости, известная как временная стоимость денег) ...

Для того, чтобы включитьчтобы избежать этой ошибки, я составил электронную таблицу: https://1drv.ms/x/s!AqGuYeJW3VHggc9ARWCxcHIeodd2Pg

Вам просто нужно поэкспериментировать с этим !!! ... И понять, что при процентной ставке 0% результаты идентичны средневзвешенномуописано в других сообщениях, но по мере увеличения скорости есть отклонение.Затем вам нужно создать функцию XNPV для вашего языка программирования и объединить ее с вашим приложением.

также есть ряд примеров роста в книгах по алгебре. Может быть, есть пересечение с ними и смещения даты и времени, найденные в* денежные потоки 1008 *

0 голосов
/ 12 декабря 2016

Я думаю, что формула средневзвешенного значения будет sumproduct (Weights*Dates)/sum (Веса)

Где sumproduct означает сумму всех факторов. Факторы, являющиеся умножением весов и date.ticks. Если сумма весов = 1, то остается только числитель.

0 голосов
/ 24 июня 2011

Вы не можете умножить дату и время на двойное число, но вы можете установить значение для даты1 и даты2 по шкале (от 1 до 100) и выяснить, где будет находиться среднее значение. 1 против 100 заканчивается 50 в вашем сценарии 50/50.

Затем вам нужно вычислить количество дней в диапазоне. Затем вы можете умножить на взвешенное десятичное число (в процентах) и превратить это в количество дней. Затем добавьте это количество дней к первому значению.

Поскольку вы можете превратить даты в числа, это дает некоторые довольно интересные другие средства для достижения этой цели. TimeSpan - это один из способов установить это число.

0 голосов
/ 24 июня 2011

Можете ли вы использовать Ticks свойство DateTime?Что-то вроде:

        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 голосов
/ 24 июня 2011

Вы можете найти разницу между двумя датами (начало и конец) в днях.Примените вес к difference_days и получите окончательную дату вывода на startdate + weightedDays

0 голосов
/ 24 июня 2011

Используйте длинные метки времени объектов DateTime.

...