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 ?

Était-ce utile?

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();

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top