web-dev-qa-db-fra.com

Multiplier TimeSpan dans .NET

Comment multiplier un objet TimeSpan en C #? En supposant que la variable duration est un TimeSpan , je voudrais, par exemple

duration*5

Mais cela me donne une erreur "operator * ne peut pas être appliqué aux types TimeSpan et int". Voici ma solution de contournement actuelle

duration+duration+duration+duration+duration

Mais cela ne s'étend pas aux multiples non entiers, par exemple. duration * 3.5

78
Colonel Panic

De cet article

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

Pour ceux qui souhaitent copier et coller:

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

Exemple d'utilisation:

using Utility;

private static void Example()
{
    TimeSpan t = TimeSpan.FromSeconds(30).Multiply(5);
}

t se terminera en 150 secondes.

43
Stephen Hewlett

La structure TimeSpan ne fournit pas de surcharge pour le * opérateur, vous devez donc le faire vous-même:

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

Vous pouvez utiliser les données internes de TimeSpan, à savoir les ticks.

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

TimeSpan.Multiply est arrivé dans .NET Core et semble arriver dans .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

Vous devez spécifier le membre que vous souhaitez multiplier par 5 -> TimeSpan.TotalMinutes * 5

1
PedroC88

Le problème ici est que vous voulez multiplier la durée. La solution de contournement la plus simple consiste à utiliser des graduations. par exemple.

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