Juste curieux, y a-t-il une chaîne de format que je peux utiliser pour produire quelque chose comme "5h 3m 30s"?
par exemple. (évidemment faux)
myTimeSpan.ToString("hh mm ss")
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, 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 également disponibles via Noda Time :)
Soyez conscient de cela lorsque vous utilisez la réponse de Jon Skeet, avec un code comme celui-ci:
Vous obtenez des résultats comme ceux-ci:
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:
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.
la source
TotalHours
etc 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:
la source
TotalHours
est toujours la voie à suivre, même dans les nouvelles versions de .net.TotalHours
, car c'est undouble
, pas unint
commeHours
est, c'est-à-dire qu'il affichera des fractions d'heures ainsi que des heures entières.que diriez-vous de la concacténation:
MISE À JOUR 1:
Vous pouvez y échapper avec un guillemet simple:
h'h 'm'm 's's'
la source
Hours
,Minutes
,Seconds
proprié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:
Référence pour l'analyse de la période
la source
En utilisant
Xamarin
et.NET Portable 4.5
c'était le seul format sur lequel j'ai travaillé après avoir essayé toutes les autres réponses ici:Essentiellement, je mets les
:
guillemets simples pour leur échapper.la source
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:
L'interpolation de chaîne, introduite en C # 6, rend cela beaucoup plus clair qu'il ne le serait autrement.
la source