net - datetime to timespan c#
Multiplica TimeSpan en.NET (7)
¿Cómo multiplico un objeto TimeSpan en C #? Asumiendo que la duration
variable es un TimeSpan , me gustaría, por ejemplo
duration*5
Pero eso me da un error "el operador * no se puede aplicar a los tipos TimeSpan e int". Esta es mi solución actual
duration+duration+duration+duration+duration
Pero esto no se extiende a múltiplos no enteros, por ej. duration * 3.5
Debe especificar qué miembro quiere multiplicar por 5 -> TimeSpan.TotalMinutes * 5
El problema aquí es que quieres multiplicar el intervalo de tiempo. La solución más simple es usar ticks. p.ej.
var ticks = TimeSpan.FromMinutes(1).Ticks;
var newTimeSpan = TimeSpan.FromTicks(ticks*5);
La estructura TimeSpan
no proporciona una sobrecarga para el operador *
, por lo que debe hacer esto usted mismo:
var result = TimeSpan.FromTicks(duration.Ticks * 5);
Para aquellos que desean copiar y pegar:
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));
}
}
}
Ejemplo de uso:
using Utility;
private static void Example()
{
TimeSpan t = TimeSpan.FromSeconds(30).Multiply(5);
}
t
terminará como 150 segundos.
Puede usar los datos internos de TimeSpan, concretamente ticks.
TimeSpan day = TimeSpan.FromDays(1);
TimeSpan week = TimeSpan.FromTicks(day.Ticks * 7);
TimeSpan duration = TimeSpan.FromMinutes(1);
duration = TimeSpan.FromTicks(duration.Ticks * 12);
Console.WriteLine(duration);