¿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 .
Se introdujeron cadenas de formato TimeSpan personalizadas en .Net 4.0. Puede encontrar una referencia completa de los especificadores de formato disponibles en la página de cadenas de formato de TimeSpan personalizado de MSDN .
Aquí hay una cadena de formato de intervalo de tiempo de ejemplo:
string.Format("{0:hh\\:mm\\:ss}", myTimeSpan); //example output 15:36:15
( ACTUALIZACIÓN ) y aquí hay un ejemplo usando la interpolación de cadenas C # 6:
$"{myTimeSpan:hh\\:mm\\:ss}"; //example output 15:36:15
Debe escapar del carácter ":" con un "\" (que se debe escapar a menos que esté utilizando una cadena literal).
Este extracto de la página de cadenas de formato de TimeSpan personalizado de MSDN explica cómo escapar de ":" y "." caracteres en una cadena de formato:
Los especificadores de formato de TimeSpan personalizados no incluyen símbolos de separador de marcador de posición, como los símbolos que separan días de horas, horas de minutos o segundos de segundos fraccionarios. En cambio, estos símbolos deben incluirse en la cadena de formato personalizado como literales de cadena. Por ejemplo, "dd.hh: mm" define un punto (.) Como el separador entre días y horas, y dos puntos (:) como el separador entre horas y minutos.
myTimeSpan = new TimeSpan(15, 35, 54);
la declaraciónmyTimeSpan .ToString("hh\\mm\\ss");
dará como resultado15m35s54
. No creo que sea lo que pretendías, ya que colocará una m después de tus horas y una s después de tus minutos.$"{myTimeSpan.TotalHours}:{myTimeSpan:mm\\:ss}"
. Desde el punto de vista del usuario, podría ser mejor mostrar los días, sin embargo, nadie quiere calcular mentalmente cuántos días hay en más de 200 horas.Para .NET 3.5 y versiones anteriores, puede usar:
Código tomado de una respuesta de Jon Skeet en bytes
Para .NET 4.0 y superior, vea DoctaJonez respuesta de .
fuente
Una forma es crear un
DateTime
objeto y usarlo para formatear:Así es como lo sé. Espero que alguien pueda sugerir una mejor manera.
fuente
Sencillo. Usar
TimeSpan.ToString
con c, go G. Más información en MSDNfuente
Yo iria con
fuente
Funciona para Framework 4
http://msdn.microsoft.com/en-us/library/ee372287.aspx
fuente
Personalmente, me gusta este enfoque:
Puedes hacer esto tan personalizado como quieras sin problemas:
fuente
Este es uno increíble:
fuente
También puedes ir con:
EDITAR:
También puedes mirar Strings.Format .
fuente
Todos los caracteres literales deben escapar.
fuente
Usé el código a continuación. Es largo, pero aún así es una expresión, y produce una salida muy amigable, ya que no genera días, horas, minutos o segundos si tienen un valor de cero.
En la muestra produce resultados: "4 días 1 hora 3 segundos".
fuente
String timeComponent(int value, String name) { return value > 0 ? value + " " + name + (value > 1 ? "s" : ""); }
Llame a eso para cada componente (por ejemplotimeComponent(sp.Days, "day")
), luego useString.join
para insertar los espacios.Yo uso este metodo Soy belga y hablo holandés, así que plural de horas y minutos no es solo agregar 's' al final, sino casi una palabra diferente de singular.
Puede parecer largo, pero creo que es muy legible:
fuente
Este es el enfoque que utilicé con formato condicional. y lo publico aquí porque creo que es una forma limpia.
ejemplo de salidas:
El formateo es fácil.
time.Days:#0:;;\\
El formato anterior;;
es para cuando el valor es positivo. Los valores negativos se ignoran. y para valores cero tenemos;;\\
para ocultarlo en una cadena con formato. tenga en cuenta que la barra invertida escapada es necesaria; de lo contrario, no se formateará correctamente.fuente
Aquí está mi método de extensión :
Llamada de ejemplo:
Salida:
fuente
Esto es una molestia en VS 2010, aquí está mi solución alternativa.
fuente
El
Substring
método funciona perfectamente cuando solo quieres las Horas: Minutos: Segundos. Es un código simple, limpio y fácil de entender.fuente
Aquí está mi versión. Muestra solo lo necesario, maneja la pluralización, los negativos, y traté de hacerlo liviano.
Ejemplos de salida
Código
fuente
Si desea un formato de duración similar al de YouTube, dada la cantidad de segundos
Salida:
fuente
Quería devolver una cadena como "1 día 2 horas 3 minutos" y también tener en cuenta si, por ejemplo, los días o los minutos son 0 y luego no se muestran. gracias a John Rasch por su respuesta, que la mía es apenas una extensión de
fuente