Solo por curiosidad, ¿hay una cadena de formato que pueda usar para generar algo como "5h 3m 30s"?
p.ej. (obviamente mal)
myTimeSpan.ToString("hh mm ss")
Tratar:
myTimeSpan.ToString("h'h 'm'm 's's'")
(Tenga en cuenta que incluso los espacios deben estar entrecomillados, eso es lo que estaba mal en mi primer intento).
Supongo que está usando .NET 4, por supuesto; antes de eso, TimeSpan
no admitía cadenas de formato personalizado.
EDITAR: Como se señaló, esto no funcionará más allá de las 24 horas. También tenga en cuenta que las alternativas también están disponibles a través de Noda Time :)
Tenga en cuenta esto cuando use la respuesta de Jon Skeet, con un código como este:
Obtienes resultados como estos:
El formato de hora puede mostrar como máximo 23 horas. No mostrará 27 horas ni convertirá los 12 días en horas, simplemente los cortará como si nunca hubieran existido.
Una forma de solucionar esto sería crear una extensión que verifique la duración del TimeSpan y cree un formato en función de si el período de tiempo es superior a un año, día, etc. O simplemente siempre puede mostrar los días también porque nunca se cortan:
Tenga en cuenta que soy un principiante en la programación. Esto solo proviene de observaciones después de que tuve la suerte de notar esto después de haber asumido que se mostraría todas las horas. Digo esto porque no sé si existe una solución mejor, como otro formato de hora que puede mostrar horas interminables.
Sin embargo, creo que este formato está cumpliendo su función prevista. Solo tienes que ser consciente de ello. Así este post. La respuesta de Jon Skeet nunca indicó que este formato es mostrar solo la propiedad de hora de un formato de tipo de fecha donde las horas pueden ser como máximo 23.
fuente
TotalHours
etc. en TimeSpan. Probablemente querías estoMath.Floor(span.TotalHours) + span.ToString("'h 'm'm 's's'")
Si tiene la mala suerte de no utilizar .NET4:
fuente
TotalHours
sigue siendo el camino a seguir incluso en las versiones más nuevas de .net.TotalHours
, ya que es undouble
, no unint
igualHours
, es decir, mostrará fracciones de horas y horas completas.que tal la concatenación:
ACTUALIZACIÓN 1:
Puede escapar con comillas simples:
h'h 'm'm 's's'
fuente
Hours
,Minutes
,Seconds
propiedades de la OMI. Personalmente, prefiero usar una cadena de formato personalizado, después de averiguar las citas.Este pequeño código ayuda, para analizar y revertir:
Referencia para el análisis de intervalo de tiempo
fuente
Usando
Xamarin
y.NET Portable 4.5
este fue el único formato en el que trabajé después de probar todas las demás respuestas aquí:Básicamente, estoy poniendo las
:
comillas simples para escapar de ellas.fuente
A veces encuentro cadenas de formato un poco como expresiones regulares, en el sentido de que cuando vuelvo al código más tarde, me olvido de los matices. Por lo tanto, he optado por lo siguiente, que es menos probable que me devuelva la documentación:
La interpolación de cadenas, introducida en C # 6, hace que esto sea mucho más claro de lo que sería de otra manera.
fuente