2010-05-28 7 views
2

Je voudrais un moyen facile d'afficher n'importe quel TimeSpan en temps écoulé sans utiliser de boucles ou de logique personnalisée
par exemple.Le moyen le plus court d'afficher la valeur TimeSpan en tant que temps écoulé, par ex. 1:45:33

Je suis sûr qu'il doit y avoir une chaîne .NET intégrée ou format qui applique, mais je suis incapable de le localiser.

+0

J'ai trouvé cela, mais je suis sûr qu'il est spécifique à .NET 4 http://msdn.microsoft.com/en-us/library/ee372287 .aspx – Josh

Répondre

3

La question elle-même n'est pas un doublon mais la réponse, je suppose, est ce que vous cherchez - Custom format Timespan with String.Format. Pour simplifier davantage votre solution, vous pouvez intégrer cette fonctionnalité dans une méthode d'extension de Timespan.

+0

Aucune méthode d'extension dans .NET 2.0 –

3

Qu'est-ce qui ne va pas avec TimeSpan.ToString()?

EDIT: Vous pouvez utiliser un DateTime comme un magasin de mise en forme intermédiaire:

TimeSpan a = new TimeSpan(1, 45, 33); 
string s = string.Format("{0:H:mm:ss}", new DateTime(a.Ticks)); 
Console.WriteLine(s); 

Pas assez, mais fonctionne.

+2

L'option ToString ne s'afficherait-elle pas également en millisecondes? – James

+0

Parce que je reçois souvent des fractions de secondes comme '1: 45: 33.5060000' –

+0

Vous le ferez si votre TimeSpan contient des fractions de secondes, oui. Je suis en train d'éditer ma réponse avec une solution de contournement. – CesarGon

1

Vous pouvez utiliser:

TimeSpan t = TimeSpan.FromSeconds(999); 
string s = t.ToString("c"); // s = "00:16:39" 

Pour des formats personnalisés, voir ce MSDN page.

+0

Je n'utilise pas .NET 4.0 –

+0

OK, et vous l'avez marqué comme V2. Encore une réponse utile, donc je ne vais pas supprimer. –

0

Voici une méthode que j'utilise pour le formatage personnalisé:

TimeSpan Elapsed = TimeSpan.FromSeconds(5025); 
string Formatted = String.Format("{0:0}:{1:00}:{2:00}", 
    Math.Floor(Elapsed.TotalHours), Elapsed.Minutes, Elapsed.Seconds); 
// result: "1:23:45" 

Je ne sais pas si cela qualifie de « sans logique personnalisée », mais il est compatible .NET 3.5 et ne nécessite pas une boucle .

0

Cette utilisation:.ToString()

Selon MSDN, les format par défaut cette affiche est [-][d.]hh:mm:ss[.fffffff]. C'est le moyen le plus rapide et le plus simple d'afficher la valeur TimeSpan en tant que temps écoulé, par ex. 1:45:33

Si vous avez jours, fractions de seconde, ou une valeur négative , utilisez un format chaîne personnalisée comme décrit dans MSDN. Cela ressemble .ToString(@"hh\:mm\:ss")

Exemple:

TimeSpan elapsed = new TimeSpan(0, 1, 45, 33); 
Console.WriteLine(elapsed.ToString());    //outputs: "1:45:33" 
Console.WriteLine(elapsed.ToString(@"hh\:mm\:ss"));//outputs: "1:45:33"