Réponses:
Essayer:
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 lors de ma première tentative.)
Je suppose que vous utilisez .NET 4, bien sûr - avant cela, TimeSpanne 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 également disponibles via Noda Time :)
Soyez conscient de 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 de l'heure peut afficher au maximum 23 heures. Il n'affiche pas 27 heures ou ne convertit pas les 12 jours en heures, il les coupe 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 du TimeSpan et crée un formatage basé sur si la période est supérieure à un an, jour, etc. Ou vous pouvez simplement toujours afficher les jours, car ils ne coupent jamais:
string newFormat = span.ToString("d'd 'h'h 'm'm 's's'");
Notez que je suis un débutant en programmation. Cela ne vient que d'observations après avoir eu la chance de le remarquer après avoir supposé que cela afficherait toutes les heures. Je dis cela parce que je ne sais pas s'il existe une meilleure solution, comme un autre format d'heure qui peut afficher des heures sans fin.
Je pense cependant que ce format fait sa fonctionnalité prévue. Il faut juste en être conscient. Ainsi ce poste. La réponse de Jon Skeet n'a jamais indiqué que ce format consiste à afficher uniquement la propriété hour d'un format de type date où les heures peuvent être au plus 23.
TotalHoursetc dans TimeSpan. Vous vouliez probablement ceciMath.Floor(span.TotalHours) + span.ToString("'h 'm'm 's's'")
Si vous avez la malchance de ne pas utiliser .NET4:
string.Format("{0}h{1}m{2}s",
myTimeSpan.Hours,
myTimeSpan.Minutes,
myTimeSpan.Seconds);
TotalHoursest toujours la voie à suivre, même dans les nouvelles versions de .net.
TotalHours, car c'est un double, pas un intcomme Hoursest, c'est-à-dire qu'il affichera des fractions d'heures ainsi que des heures entières.
que diriez-vous de la concacténation:
String oTime = myTimeSpan.ToString("h") + "h " +
myTimeSpan.ToString("m") + "m " +
myTimeSpan.ToString("s") + "s "
MISE À JOUR 1:
Vous pouvez y échapper avec un guillemet simple: h'h 'm'm 's's'
Hours, Minutes, Secondspropriétés de l' OMI. Personnellement, je préfère utiliser une chaîne de format personnalisée, après avoir compris la citation.
Ce petit code aide, pour l'analyse et le retour arrière:
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;
En utilisant Xamarinet .NET Portable 4.5c'était le seul format sur lequel j'ai travaillé après avoir essayé toutes les autres réponses ici:
timespan.ToString("hh':'mm':'ss");
Essentiellement, je mets les :guillemets simples pour leur échapper.
Je trouve parfois des chaînes de format un peu comme des expressions rationnelles, en ce sens que lorsque je reviens au code plus tard, j'ai oublié les nuances. Je suis donc allé avec ce qui suit, qui est moins susceptible de me renvoyer la documentation:
string FormatTimeSpan(TimeSpan timeSpan) =>
$"{Math.Floor(timeSpan.TotalHours)}h {timeSpan.Minutes}m {timeSpan.Seconds}s";
L'interpolation de chaîne, introduite en C # 6, rend cela beaucoup plus clair qu'il ne le serait autrement.