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
TimeSpan duration = TimeSpan.FromMinutes(1);
duration = TimeSpan.FromTicks(duration.Ticks * 12);
Console.WriteLine(duration);
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.
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);
Vous pouvez utiliser les données internes de TimeSpan, à savoir les ticks.
TimeSpan day = TimeSpan.FromDays(1);
TimeSpan week = TimeSpan.FromTicks(day.Ticks * 7);
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);
Vous devez spécifier le membre que vous souhaitez multiplier par 5 -> TimeSpan.TotalMinutes * 5
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);