Умножить промежуток времени in.NET


Как умножить объект TimeSpan в C#? Предполагая, что переменная duration это TimeSpan, хотелось бы, например

duration*5

но это дает мне ошибку "оператор * не может быть применен к типам TimeSpan и int". Вот мой текущий обходной путь

duration+duration+duration+duration+duration

но это не распространяется на не-кратные, например. duration * 3.5

7 65

7 ответов:

в этой статье

TimeSpan duration = TimeSpan.FromMinutes(1);
duration = TimeSpan.FromTicks(duration.Ticks * 12);
Console.WriteLine(duration);     

для желающих скопировать и вставить:

namespace Utility
{
    public static class TimeSpanExtension
    {
        /// <summary>
        /// Multiplies a timespan by an integer value
        /// </summary>
        public static TimeSpan Multiply(this TimeSpan multiplicand, int multiplier)
        {
            return TimeSpan.FromTicks(multiplicand.Ticks * multiplier);
        }

        /// <summary>
        /// Multiplies a timespan by a double value
        /// </summary>
        public static TimeSpan Multiply(this TimeSpan multiplicand, double multiplier)
        {
            return TimeSpan.FromTicks((long)(multiplicand.Ticks * multiplier));
        }
    }
}

Пример Использования:

using Utility;

private static void Example()
{
    TimeSpan t = TimeSpan.FromSeconds(30).Multiply(5);
}

t в конечном итоге, как 150 секунд.

The TimeSpan структура не обеспечивает перегрузку для * оператора, так что вы должны сделать это сами:

var result = TimeSpan.FromTicks(duration.Ticks * 5);

вы можете использовать внутренние данные TimeSpan, а именно тики.

TimeSpan day = TimeSpan.FromDays(1);
TimeSpan week = TimeSpan.FromTicks(day.Ticks * 7);

вам нужно указать, какой член вы хотите умножить на 5 ->TimeSpan.TotalMinutes * 5

проблема здесь заключается в том, что вы хотите умножить промежуток времени. Самым простым обходным путем является использование клещей. например.

 var ticks = TimeSpan.FromMinutes(1).Ticks;
 var newTimeSpan = TimeSpan.FromTicks(ticks*5);