web-dev-qa-db-fra.com

Erreur TimeSpan.ToString ("hh: mm")

Pourquoi j'ai une erreur quand je veux obtenir la chaîne d'un TimeSpan avec un format personnalisé.

DateTime.Now.TimeOfDay.ToString("hh:mm");
// Error: Input string was not in a correct format.
25
DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss")

Documentation

52
Ravi M Patel

Selon MSDN, TimeOfDay est un TimeSpan. Et dans les exemples de TimeSpan.ToString vous voyez que le : doit être échappé.

hh \: mm \: ss: 03:00:00

Ceci est également expliqué sur la page Chaînes de format TimeSpan personnalisées

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, des heures des minutes ou des secondes des fractions de seconde. Au lieu de cela, ces symboles doivent être inclus dans la chaîne de format personnalisé 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.

Alors essayez:

DateTime.Now.TimeOfDay.ToString("hh\:mm");
9
Michaël Hompus

N'utilisez pas TimeOfDay. Faites directement ToString() sur DateTime.Now:

DateTime.Now.ToString("hh:mm");

TimeOfDay est un TimeSpan. Les documents indiquent clairement ceci à propos de la surcharge de TimeSpan.ToString(string format):

Le paramètre de format peut être n'importe quel spécificateur de format standard ou personnalisé valide pour les valeurs TimeSpan. Si le format est égal à String.Empty ou est nul, la valeur de retour de l'objet TimeSpan actuel est formatée avec le spécificateur de format commun ("c "). Si format est une autre valeur, la méthode lève une exception FormatException.

Si vous devez le faire en utilisant une variable TimeSpan, vous pouvez simplement l'ajouter à une variable DateTime dont la partie temps est définie sur zéro, puis utiliser sa ToString():

DateTime.Today.Add(YourTimeSpanVariable).ToString("hh:mm");
0
dotNET