Qual é a maneira recomendada de formatar TimeSpan
objetos em uma string com um formato personalizado?
Observe: esta resposta é para .Net 4.0 e superior. Se você deseja formatar um TimeSpan em .Net 3.5 ou abaixo, consulte a resposta de JohannesH .
As seqüências de caracteres personalizadas no formato TimeSpan foram introduzidas no .Net 4.0. Você pode encontrar uma referência completa dos especificadores de formato disponíveis na página Strings de formato do MSDN Custom TimeSpan .
Aqui está um exemplo de sequência de formato de período de tempo:
string.Format("{0:hh\\:mm\\:ss}", myTimeSpan); //example output 15:36:15
( UPDATE ) e aqui está um exemplo usando a interpolação de string C # 6:
$"{myTimeSpan:hh\\:mm\\:ss}"; //example output 15:36:15
Você precisa escapar do caractere ":" com um "\" (que deve ser escapado, a menos que você esteja usando uma string literal).
Este trecho da página Strings de formato de tempo personalizado do MSDN explica como escapar do ":" e "." caracteres em uma sequência de formato:
Os especificadores de formato TimeSpan personalizados não incluem símbolos separadores de espaços reservados, como os símbolos que separam dias de horas, horas de minutos ou segundos de segundos fracionários. Em vez disso, esses símbolos devem ser incluídos na string de formato personalizado como literais de string. Por exemplo, "dd.hh: mm" define um ponto (.) Como o separador entre dias e horas e dois pontos (:) como o separador entre horas e minutos.
myTimeSpan = new TimeSpan(15, 35, 54);
instruçãomyTimeSpan .ToString("hh\\mm\\ss");
resultará15m35s54
. Eu não acho que é isso que você pretendia, pois colocaria um m depois do seu horário e um s depois dos seus minutos.$"{myTimeSpan.TotalHours}:{myTimeSpan:mm\\:ss}"
. Do ponto de vista do usuário, pode ser melhor exibir os dias, porém, ninguém quer descobrir mentalmente quantos dias existem em mais de 200 horas.Para o .NET 3.5 e inferior, você pode usar:
Código extraído de uma resposta Jon Skeet em bytes
Para o .NET 4.0 e superior, consulte a resposta DoctaJonez .
fonte
Uma maneira é criar um
DateTime
objeto e usá-lo para formatar:É assim que eu sei. Espero que alguém possa sugerir uma maneira melhor.
fonte
Simples. Use
TimeSpan.ToString
com c, g ou G. Mais informações no MSDNfonte
Eu iria com
fonte
Funciona para o Framework 4
http://msdn.microsoft.com/en-us/library/ee372287.aspx
fonte
Pessoalmente, gosto desta abordagem:
Você pode fazer isso da maneira que desejar, sem problemas:
fonte
Este é incrível:
fonte
Você também pode ir com:
EDITAR:
Você também pode olhar para Strings.Format .
fonte
Todos os caracteres literais devem ser escapados.
fonte
Eu usei o código abaixo. É longo, mas ainda assim é uma expressão e produz uma saída muito amigável, pois não gera dias, horas, minutos ou segundos se tiverem valor zero.
Na amostra, produz saída: "4 dias 1 hora 3 segundos".
fonte
String timeComponent(int value, String name) { return value > 0 ? value + " " + name + (value > 1 ? "s" : ""); }
Chame isso para cada componente (por exemplotimeComponent(sp.Days, "day")
) e useString.join
para inserir os espaços.Eu uso esse método Sou belga e falo holandês, portanto, o plural de horas e minutos não está apenas adicionando 's' ao final, mas quase uma palavra diferente de singular.
Pode parecer longo, mas é muito legível, eu acho:
fonte
Essa é a abordagem que eu usei com formatação condicional. e eu posto aqui porque acho que é uma maneira limpa.
exemplo de saídas:
A formatação é fácil.
time.Days:#0:;;\\
o formato anterior;;
é para quando o valor é positivo. valores negativos são ignorados. e para valores zero, temos;;\\
para ocultá-lo em uma string formatada. observe que a barra invertida escapada é necessária, caso contrário, ela não será formatada corretamente.fonte
Aqui está o meu método de extensão :
Chamada de exemplo:
Resultado:
fonte
Isso é uma dor no VS 2010, aqui está minha solução alternativa.
fonte
O
Substring
método funciona perfeitamente quando você deseja apenas Horas: Minutos: Segundos. É um código simples, limpo e fácil de entender.fonte
Aqui está a minha versão. Ele mostra apenas o necessário, lida com pluralização, negativos e tentei torná-lo leve.
Exemplos de saída
Código
fonte
Se você deseja um formato de duração semelhante ao youtube, dado o número de segundos
Resultado:
fonte
Eu queria retornar uma string como "1 dia, 2 horas e 3 minutos" e também levar em consideração se, por exemplo, dias ou minutos são 0 e depois não os mostramos. graças a John Rasch por sua resposta, que a minha é apenas uma extensão do
fonte