¿Cómo puedo String.Format un objeto TimeSpan con un formato personalizado en .NET?

Resuelto Hosam Aly asked hace 15 años • 20 respuestas

¿ Cuál es la forma recomendada de formatear TimeSpanobjetos en una cadena con un formato personalizado?

Hosam Aly avatar Feb 22 '09 19:02 Hosam Aly
Aceptado

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.

Doctor Jones avatar Dec 08 '2010 10:12 Doctor Jones

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 .

JohannesH avatar Feb 22 '2009 13:02 JohannesH

Una forma es crear un DateTimeobjeto 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.

 avatar Feb 22 '2009 13:02