Hay no es necesario convertir de hh.mm.ss
a hh.mm
. TimeSpan
se almacena como un número de tics (1 tick == 100 nanosegundos). ¡Lo que tienes que hacer es convertir esta representación binaria interna en una cadena legible para humanos! Esto se llama formateo. Si no especifica un formato explícitamente, se usará un formato predeterminado. En este caso hh.mm.ss
.
string formatted = timespan.ToString(@"hh\.mm");
Nota: Esta sobrecarga de ToString
existe desde .NET 4.0. ¡No admite símbolos separadores de marcador de fecha y hora! Por lo tanto, debe incluirlos como literales de cadena (escapados).
La forma habitual de formatear cadenas parece no funcionar por alguna extraña razón (probado con .NET 3.5). (No hace ninguna diferencia si escapas el símbolo separador o no):
var timespan = TimeSpan.FromSeconds(1234);
string formatted = String.Format("{0:hh.mm}", timespan); // ==> 00:20:34
Sin embargo, se puede construir la cadena como esta
string formatted =
String.Format("{0:00}.{1:00}", Math.Floor(timespan.TotalHours), timespan.Minutes);
o comenzar con VS2015/C# 6.0, usando cuerdas interpolación:
string formatted = $"{Math.Floor(timespan.TotalHours):00}.{timespan.Minutes:00}";
Un consejo sería echar un vistazo a [Roslyn CTP] (http://www.microsoft.com/en-us/download/details.aspx?id=34685) que he encontrado muy útil para probar el formateo en C# si está usando Visual Studio. – flindeberg