Quelle est la méthode recommandée pour mettre en forme des TimeSpan
objets dans une chaîne avec un format personnalisé?
Remarque: cette réponse concerne .Net 4.0 et supérieur. Si vous souhaitez formater un TimeSpan en .Net 3.5 ou inférieur, veuillez consulter la réponse de JohannesH .
Les chaînes de format TimeSpan personnalisées ont été introduites dans .Net 4.0. Vous pouvez trouver une référence complète des spécificateurs de format disponibles sur la page MSDN Custom TimeSpan Format Strings .
Voici un exemple de chaîne de format de période:
string.Format("{0:hh\\:mm\\:ss}", myTimeSpan); //example output 15:36:15
( UPDATE ) et voici un exemple utilisant l'interpolation de chaîne C # 6:
$"{myTimeSpan:hh\\:mm\\:ss}"; //example output 15:36:15
Vous devez échapper le caractère ":" avec un "\" (qui lui-même doit être échappé sauf si vous utilisez une chaîne textuelle).
Cet extrait de la page MSDN Custom TimeSpan Format Strings explique comment échapper à ":" et "". caractères dans une chaîne de format:
Les spécificateurs de format TimeSpan personnalisés n'incluent pas de symboles de séparation d'espace réservé, tels que les symboles qui séparent les jours des heures, les heures des minutes ou les secondes des fractions de seconde. Au lieu de cela, ces symboles doivent être inclus dans la chaîne de format personnalisée en tant que littéraux de chaîne. Par exemple, "jj.hh: mm" définit un point (.) Comme séparateur entre les jours et les heures et un deux-points (:) comme séparateur entre les heures et les minutes.
myTimeSpan = new TimeSpan(15, 35, 54);
l'instructionmyTimeSpan .ToString("hh\\mm\\ss");
se traduira par15m35s54
. Je ne pense pas que ce soit ce que vous vouliez, car cela placera un m après vos heures et un s après vos minutes.$"{myTimeSpan.TotalHours}:{myTimeSpan:mm\\:ss}"
. Du point de vue de l'utilisateur, il serait peut-être préférable d'afficher les jours, personne ne veut mentalement savoir combien de jours sont dans plus de 200 heures.Pour .NET 3.5 et versions antérieures, vous pouvez utiliser:
Code tiré d'une réponse de Jon Skeet sur les octets
Pour .NET 4.0 et supérieur, consultez la réponse de DoctaJonez .
la source
Une façon est de créer un
DateTime
objet et de l'utiliser pour le formatage:C'est comme ça que je sais. J'espère que quelqu'un pourra suggérer une meilleure solution.
la source
Facile. Utiliser
TimeSpan.ToString
avec c, g ou G. Plus d'informations sur MSDNla source
J'irais avec
la source
Cela fonctionne pour Framework 4
http://msdn.microsoft.com/en-us/library/ee372287.aspx
la source
Personnellement, j'aime cette approche:
Vous pouvez le personnaliser comme vous le souhaitez sans aucun problème:
la source
C'est génial:
la source
Vous pouvez également utiliser:
ÉDITER:
Vous pouvez également consulter Strings.Format .
la source
Tous les caractères littéraux doivent être échappés.
la source
J'ai utilisé le code ci-dessous. Il est long, mais il s'agit toujours d'une expression et produit une sortie très conviviale, car il ne génère pas de jours, heures, minutes ou secondes s'ils ont une valeur de zéro.
Dans l'exemple, il produit une sortie: "4 jours 1 heure 3 secondes".
la source
String timeComponent(int value, String name) { return value > 0 ? value + " " + name + (value > 1 ? "s" : ""); }
Appelez cela pour chaque composant (par exempletimeComponent(sp.Days, "day")
), puis utilisezString.join
pour insérer les espaces.J'utilise cette méthode. Je suis belge et parle néerlandais, donc le pluriel des heures et des minutes ne consiste pas seulement à ajouter des «s» à la fin, mais presque un mot différent du singulier.
Cela peut paraître long mais c'est très lisible je pense:
la source
C'est l'approche que j'ai utilisée moi-même avec la mise en forme conditionnelle. et je le poste ici parce que je pense que c'est une manière propre.
exemple de sorties:
Le formatage est simple.
time.Days:#0:;;\\
le format avant;;
est pour quand la valeur est positive. les valeurs négatives sont ignorées. et pour les valeurs nulles, nous avons;;\\
afin de le cacher dans une chaîne formatée. notez que la barre oblique inverse échappée est nécessaire sinon elle ne se formatera pas correctement.la source
Voici ma méthode d'extension :
Exemple d'appel:
Production:
la source
C'est une douleur dans VS 2010, voici ma solution de contournement.
la source
La
Substring
méthode fonctionne parfaitement lorsque vous ne voulez que les heures: minutes: secondes. C'est un code simple, propre et facile à comprendre.la source
Voici ma version. Il ne montre que ce qui est nécessaire, gère la pluralisation, les négatifs et j'ai essayé de le rendre léger.
Exemples de sortie
Code
la source
Si vous voulez un format de durée similaire à YouTube, étant donné le nombre de secondes
Production:
la source
Je voulais renvoyer une chaîne telle que "1 jour 2 heures 3 minutes" et aussi prendre en compte si par exemple les jours ou les minutes sont à 0 et ne pas les afficher. merci à John Rasch pour sa réponse dont la mienne est à peine une extension de
la source