remarks example cref c# .net datetime timespan

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.



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.