在.NET中乘以TimeSpan

问题描述 投票:76回答:8

如何在C#中乘以TimeSpan对象?假设变量durationTimeSpan,我想,例如

duration*5

但这给了我一个错误“operator *不能应用于类型TimeSpan和int”。这是我目前的解决方法

duration+duration+duration+duration+duration

但这并没有扩展到非整数倍,例如。 duration * 3.5

c# .net date time timespan
8个回答
94
投票

From this article

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

43
投票

对于那些希望复制和粘贴的人:

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
投票

TimeSpan结构不会为*运算符提供过载,因此您必须自己执行此操作:

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

4
投票

您可以使用TimeSpan的内部数据,即刻度。

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


2
投票

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);

1
投票

你需要指定你想要乘以5 - > TimeSpan.TotalMinutes * 5的成员


1
投票

这里的问题是你想要乘以时间跨度。最简单的解决方法是使用刻度线。例如。

 var ticks = TimeSpan.FromMinutes(1).Ticks;
 var newTimeSpan = TimeSpan.FromTicks(ticks*5);
© www.soinside.com 2019 - 2024. All rights reserved.