veces reinicio que puede pasa muchas formatear cuantas celular .net vb.net formatting timespan

.net - reinicio - cuantas veces se puede formatear un celular



Formateo de un TimeSpan negativo (6)

Estoy haciendo algunas matemáticas con los Timespans en .Net, y ocasionalmente la suma da como resultado un Timespan negativo. Cuando visualizo el resultado, tengo problemas para formatearlo para incluir el indicador negativo.

Dim ts as New Timespan(-10,0,0) ts.ToString()

Esto mostrará "-10: 00: 00", lo cual es bueno, pero no quiero mostrar los segundos, así que probé esto.

ts.ToString("hh/:mm")

Esto devuelve "10:00" y ha dejado caer "-" desde el frente, que es el quid de la cuestión. Mi solución actual es esta:

If(ts < TimeSpan.Zero, "-", "") & ts.ToString("hh/:mm")

pero esperaba lograr lo mismo usando solo la cadena de formato.


Basado en @ ho1 answer, construí un método de extensión. Puede ser un poco más fácil de usar hoy en día.

public static class TimeSpanUtil { public static string HoursAndMinutes(this TimeSpan ts) { return (ts < TimeSpan.Zero ? "-" : "") + ts.ToString("hh:mm"); } }


El formato estándar "c" proporciona el signo negativo, pero incluye todas las partes del intervalo de tiempo.

Dim ts As New TimeSpan(-10, 1, 2) Debug.WriteLine(ts.ToString("c"))


Estoy de acuerdo con Will. MSDN y Reflector indican que no tiene suerte. Lo mejor que obtendrá es usar lo que tiene, escribir su propio IFormatProvider o usar uno de los formatos estándar para el intervalo de tiempo como "g".


Estoy usando este código fugly:

if (timeDiff.TotalSeconds < 0) { timeDiff = timeDiff.Negate(); TimeChangeTb.Text = string.Format("-{0:D2}:{1:D2}:{2:D2}", timeDiff.Hours, timeDiff.Minutes, timeDiff.Seconds); } else { TimeChangeTb.Text = string.Format("{0:D2}:{1:D2}:{2:D2}", timeDiff.Hours, timeDiff.Minutes, timeDiff.Seconds); }

¡Espero eso ayude!


He usado .Net Reflector en TimeSpan.ToString (...) y realmente no parece admitir ninguna forma de prefijo negativo en formatos personalizados, así que creo que no tienes suerte a la hora de conseguirlo para que trabaje para usted como se indica arriba. :(


Parece que estás atascado con ese código, pero si es así, este parece ser un buen momento para escribir un método de extesión, de esa manera puedes hacer que tu código sea más claro y no tienes que repetir ese código en varios lugares, por lo que algo como:

Module Extensions <System.Runtime.CompilerServices.Extension()> _ Public Function HoursAndMinutes(ByVal ts As TimeSpan) As String Return If(ts < TimeSpan.Zero, "-", "") & ts.ToString("hh/:mm") End Function End Module

Y luego podrías llamarlo así:

ts.HoursAndMinutes()