如何在C#中乘以TimeSpan对象?假设变量duration
是TimeSpan,我想,例如
duration*5
但这给了我一个错误“operator *不能应用于类型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);