C#でTimeSpanオブジェクトを乗算するにはどうすればよいですか?変数duration
が TimeSpan であると仮定すると、たとえば
duration*5
しかし、それは「演算子*はTimeSpan型とint型には適用できません」というエラーになります。これが私の現在の回避策です
duration+duration+duration+duration+duration
しかし、これは非整数倍数には適用されません。 duration * 3.5
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秒になります。
TimeSpan
構造体は*
演算子のオーバーロードを提供しないため、これを自分で行う必要があります。
var result = TimeSpan.FromTicks(duration.Ticks * 5);
TimeSpanの内部データ、つまりティックを使用できます。
TimeSpan day = TimeSpan.FromDays(1);
TimeSpan week = TimeSpan.FromTicks(day.Ticks * 7);
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);
5で乗算するメンバーを指定する必要があります-> TimeSpan.TotalMinutes * 5
ここでの問題は、タイムスパンを増やすことです。最も簡単な回避策は、ティックを使用することです。例えば。
var ticks = TimeSpan.FromMinutes(1).Ticks;
var newTimeSpan = TimeSpan.FromTicks(ticks*5);