c# - example - Manejar períodos de tiempo negativos
remarks c# (8)
¿No hay un método TimeSpan.Duration
? Creo que esto manejaría lo que estás tratando de hacer.
En mi salida de una cuadrícula, calculo un TimeSpan
y tomo su TotalHours
. p.ej
(Eval("WorkedHours") - Eval("BadgedHours")).TotalHours
El objetivo es mostrar el TotalHours
como 39:44
, por lo que debo convertir el valor de 7.5
a 07:30
. Esto no es problema ... a menos que sea negativo!
Puedo crear un objeto TimeSpan
desde Hours
con
TimeSpan.FromHours( (Eval("WorkedHours") - Eval("BadgedHours")).TotalHours)
Si es negativo, no puedo convertirlo a un DateTime
para usar el .ToString("HH:mm")
, y el objeto TimeSpan
no admite la cadena de formato.
Hay un método Negate en la clase TimeSpan.
Enlace a la documentación de MSDN: Método TimeSpan.Negate ()
Hola, trabajé esto en un poco de código que he estado escribiendo, espero que ayude
(resultados) es una variable int
(TimeSpan.FromMinutes(result)) < TimeSpan.Zero ? "-" + TimeSpan.FromMinutes(result).ToString(@"hh/:mm") : "" + TimeSpan.FromMinutes(result).ToString(@"hh/:mm");
La solución simple sería hacer:
string format = "HH:mm";
if(hours < 0)
format = "-" + format;
hours = Math.Abs(hours)
Revisé en todas partes. Pero no obtuve una respuesta correcta, por eso usé esta forma de terminar.
TimeSpan diff = actualout.Subtract(actualin);
string a =(diff.ToString()).ToString();
if(a.Contains("-"))
{
diff = new TimeSpan(0,0,0,0);
}
Simplemente multiplíquelo por -1 o use una función de valor absoluto.
esta trabajando.
mytimespam.Negate ();
static string ToHMString(TimeSpan timespan) {
if (timespan.Ticks < 0) return "-" + ToHMString(timespan.Negate());
return timespan.TotalHours.ToString("#0") + ":" + timespan.Minutes.ToString("00");
}
Console.WriteLine(ToHMString(TimeSpan.FromHours(3))); //Prints "3:00"
Console.WriteLine(ToHMString(TimeSpan.FromHours(-27.75))); //Prints "-28:45"
Esto también funcionará correctamente si el tiempo es más largo que 24 horas.