Умножьте TimeSpan в .NET - PullRequest
       74

Умножьте TimeSpan в .NET

78 голосов
/ 28 марта 2012

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

duration*5

Но это дает мне ошибку «оператор * не может применяться к типам TimeSpan и int».Вот мой текущий обходной путь

duration+duration+duration+duration+duration

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

Ответы [ 8 ]

94 голосов
/ 28 марта 2012

Из этой статьи

TimeSpan duration = TimeSpan.FromMinutes(1);
duration = TimeSpan.FromTicks(duration.Ticks * 12);
Console.WriteLine(duration);     
43 голосов
/ 11 января 2013

Для тех, кто хочет скопировать и вставить:

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 секунд.

12 голосов
/ 28 марта 2012

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

var result = TimeSpan.FromTicks(duration.Ticks * 5);
4 голосов
/ 28 марта 2012

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

TimeSpan day = TimeSpan.FromDays(1);
TimeSpan week = TimeSpan.FromTicks(day.Ticks * 7);
2 голосов
/ 18 апреля 2019

TimeSpan.Multiply прибыл в .NET Core и выглядит так, как будто он поступит в .NET Standard 2.1:

https://docs.microsoft.com/en-us/dotnet/api/system.timespan.op_multiply?view=netstandard-2.1

   var result = 3.0 * TimeSpan.FromSeconds(3);
2 голосов
/ 28 марта 2012
1 голос
/ 28 марта 2012

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

 var ticks = TimeSpan.FromMinutes(1).Ticks;
 var newTimeSpan = TimeSpan.FromTicks(ticks*5);
1 голос
/ 28 марта 2012

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

...