Question
J'ai quelques chaînes au format xxh:yym où xx correspond aux heures et yy aux minutes comme "05h:30m".Quelle est une manière élégante de convertir une chaîne de ce type en TimeSpan ?
La solution
Cela semble fonctionner, même si c'est un peu hackish :
TimeSpan span;
if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span))
MessageBox.Show(span.ToString());
Autres conseils
DateTime.ParseExact
ou DateTime.TryParseExact
vous permet de spécifier le format exact de l'entrée.Après avoir obtenu le DateTime
, vous pouvez saisir le DateTime.TimeOfDay
qui est un TimeSpan
.
En l'absence de TimeSpan.TryParseExact
, je pense qu'une solution « élégante » est hors de propos.
@buyutec Comme vous vous en doutiez, cette méthode ne fonctionnerait pas si les délais sont supérieurs à 24 heures.
Voici une possibilité :
TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));
Et si vous souhaitez le rendre plus élégant dans votre code, utilisez une méthode d'extension :
public static TimeSpan ToTimeSpan(this string s)
{
TimeSpan t = TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));
return t;
}
Alors tu peux faire
"05h:30m".ToTimeSpan();
D'un autre fil :
Sont TimeSpan.Parse et TimeSpan.TryParse pas d'options ?Si vous n'utilisez pas un format « approuvé », vous devrez effectuer l'analyse manuellement.Je capturerais probablement vos deux valeurs entières dans une expression régulière, puis j'essaierais de les analyser en entiers, à partir de là, vous pourrez créer un nouveau TimeSpan avec son constructeur.