¿Cómo puedo String.Format un objeto TimeSpan con un formato personalizado en .NET?
¿ Cuál es la forma recomendada de formatear TimeSpan
objetos en una cadena con un formato personalizado?
Tenga en cuenta: esta respuesta es para .Net 4.0 y superior. Si desea formatear un TimeSpan en .Net 3.5 o inferior, consulte la respuesta de JohannesH .
Las cadenas de formato TimeSpan personalizadas se introdujeron en .Net 4.0. Puede encontrar una referencia completa de los especificadores de formato disponibles en la página Cadenas de formato de intervalo de tiempo personalizado de MSDN .
Aquí hay un ejemplo de cadena de formato de intervalo de tiempo:
string.Format("{0:hh\\:mm\\:ss}", myTimeSpan); //example output 15:36:15
( ACTUALIZACIÓN ) y aquí hay un ejemplo que utiliza la interpolación de cadenas de C# 6:
$"{myTimeSpan:hh\\:mm\\:ss}"; //example output 15:36:15
Debes escapar el carácter ":" con un "\" (que a su vez debe escaparse a menos que estés usando una cadena textual).
Este extracto de la página Cadenas de formato TimeSpan personalizado de MSDN explica cómo escapar de ":" y "." caracteres en una cadena de formato:
Los especificadores de formato TimeSpan personalizados no incluyen símbolos separadores de marcador de posición, como los símbolos que separan días de horas, horas de minutos o segundos de fracciones de segundo. En cambio, estos símbolos deben incluirse en la cadena de formato personalizado como cadenas literales. Por ejemplo, "dd.hh:mm" define un punto (.) como separador entre días y horas, y dos puntos (:) como separador entre horas y minutos.
Para .NET 3.5 y versiones anteriores, puede usar:
string.Format ("{0:00}:{1:00}:{2:00}",
(int)myTimeSpan.TotalHours,
myTimeSpan.Minutes,
myTimeSpan.Seconds);
Código tomado de una respuesta de Jon Skeet en bytes
Para .NET 4.0 y superior, consulte la respuesta de DoctaJonez .
Una forma es crear un DateTime
objeto y usarlo para formatear:
new DateTime(myTimeSpan.Ticks).ToString(myCustomFormat)
// or using String.Format:
String.Format("{0:HHmmss}", new DateTime(myTimeSpan.Ticks))
Esta es la forma en que lo sé. Espero que alguien pueda sugerir una manera mejor.