web-dev-qa-db-ja.com

.NETでTimeSpanを乗算する

C#でTimeSpanオブジェクトを乗算するにはどうすればよいですか?変数durationTimeSpan であると仮定すると、たとえば

duration*5

しかし、それは「演算子*はTimeSpan型とint型には適用できません」というエラーになります。これが私の現在の回避策です

duration+duration+duration+duration+duration

しかし、これは非整数倍数には適用されません。 duration * 3.5

78
Colonel Panic

この記事から

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

コピーアンドペーストを希望する場合:

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秒になります。

43
Stephen Hewlett

TimeSpan構造体は*演算子のオーバーロードを提供しないため、これを自分で行う必要があります。

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

TimeSpanの内部データ、つまりティックを使用できます。

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

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
antmeehan
2
SkonJeet

5で乗算するメンバーを指定する必要があります-> TimeSpan.TotalMinutes * 5

1
PedroC88

ここでの問題は、タイムスパンを増やすことです。最も簡単な回避策は、ティックを使用することです。例えば。

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