Par curiosité, existe-t-il une chaîne de format que je peux utiliser pour afficher quelque chose comme "5h 3m 30s" ?
eg. (évidemment faux)
myTimeSpan.ToString("hh mm ss")
Par curiosité, existe-t-il une chaîne de format que je peux utiliser pour afficher quelque chose comme "5h 3m 30s" ?
eg. (évidemment faux)
myTimeSpan.ToString("hh mm ss")
Essayez :
myTimeSpan.ToString("h'h 'm'm 's's'")
(Notez que même les espaces doivent être cités - c'est ce qui n'allait pas dans ma première tentative).
Je suppose que vous utilisez .NET 4, bien sûr - avant cela, TimeSpan
ne prenait pas en charge les chaînes de format personnalisées.
EDIT : Comme indiqué, cela ne fonctionnera pas au-delà de 24 heures. Notez également que des alternatives sont disponibles via Heure de Noda aussi :)
Voir la réponse de Dimension, car celle-ci ne formatera pas correctement les heures de 24 heures ou plus.
Faites attention à cela lorsque vous utilisez la réponse de Jon Skeet, avec un code comme celui-ci :
// 12 days, 23 hours, 24 minutes, 2 seconds.
TimeSpan span = new TimeSpan(12, 23, 24, 2);
// 27 hours, 24 minutes, 2 seconds
TimeSpan span2 = new TimeSpan(27,24,2);
string format = span.ToString("h'h 'm'm 's's'");
string format2 = span2.ToString("h'h 'm'm 's's'");
Console.WriteLine(format);
Console.WriteLine(format2);
Console.ReadLine();
Vous obtenez des résultats comme ceux-ci :
23h 24m 2s
3h 24m 2s
Le format horaire peut afficher au maximum 23 heures. Il n'affichera pas 27 heures ou ne convertira pas les 12 jours en heures, il les coupera simplement comme s'ils n'avaient jamais existé.
Une façon de résoudre ce problème serait de créer une extension qui vérifie la longueur de l'intervalle de temps et crée un formatage basé sur le fait que l'intervalle de temps est supérieur à une année, un jour, etc. Ou vous pourriez simplement toujours afficher les jours car ils ne sont jamais coupés :
string newFormat = span.ToString("d'd 'h'h 'm'm 's's'");
Veuillez noter que je suis un débutant en programmation. Ceci est seulement le résultat d'observations après que j'ai eu la chance de le remarquer après avoir supposé qu'il s'afficherait toutes les heures. Je dis cela parce que je ne sais pas s'il y a une meilleure solution, comme un autre format d'heure qui peut afficher des heures sans fin.
Je pense cependant que ce format remplit la fonction pour laquelle il a été conçu. Il faut juste en être conscient. D'où ce post. La réponse de Jon Skeet n'a jamais indiqué que ce format sert à afficher uniquement la propriété "heure" d'un format de type date où les heures peuvent être au maximum de 23.
Pour le code qui doit supporter >24h, cette solution avec TotalHours
est toujours la meilleure solution, même dans les versions plus récentes de .net.
En fait, je trouve que c'est mieux ainsi, puisque vous pouvez simplement lui faire confiance.
Ce petit exemple de code devrait vous aider à analyser et à inverser l'analyse de TimeSpan :
var t = TimeSpan.FromMilliseconds(450780);
double d1 = t.TotalSeconds;
string t3 = t.ToString(@"hh\:mm\:ss\.f",null);
var tt = TimeSpan.ParseExact(t3, @"hh\:mm\:ss\.f",null);
double d2 = tt.TotalSeconds;
Référence : Chaînes de format TimeSpan personnalisées
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.