Получение средневзвешенного значения даты?

Если у меня есть 50% веса на 03.06.2011 и 50% веса на 01.06.2011, средневзвешенное значение будет 02.06.2011.

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


person sooprise    schedule 24.06.2011    source источник


Ответы (7)


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);

Что-то вроде приведенного выше (вы поняли - в основном нужно нормализовать разницу в формат, с которым вы можете работать, т.е. тики и т. д.).

person Lawrence Wagerfield    schedule 24.06.2011

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

person Andreas    schedule 24.06.2011

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

person Haris Hasan    schedule 24.06.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));
person IndigoDelta    schedule 24.06.2011

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

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

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

person Gregory A Beamer    schedule 24.06.2011

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

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

person Kefalas Savvas    schedule 12.12.2016

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

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

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

так же есть ряд примеров с ростом в учебниках по алгебре.может есть пересечение с ними и найдены datetime-offsets в cashflows

person Kefalas Savvas    schedule 24.01.2019