Vous devez ajouter le séparateur de temps à votre chaîne. Essayez ceci :
TimeSpan ts = XmlConvert.ToTimeSpan("PT72H");
Voir la spécification de la durée - http://www.w3.org/TR/xmlschema-2/#duration
3.2.6.1 Représentation lexicale
La représentation lexicale de la durée est le format étendu [ISO 8601] PnYn MnDTnH nMnS, où nY représente le nombre d'années, nM le nombre de mois, nD le nombre de jours, "T" est le séparateur date/heure, nH le nombre d'heures, nM le nombre de minutes et nS le nombre de secondes. Le nombre de secondes peut inclure des chiffres décimaux avec une précision arbitraire.
Modifier/mettre à jour en fonction des commentaires
Comme on se demandait pourquoi la ficelle P2M2W5D
ne serait pas considéré comme un TimeSpan
depuis W
fait partie de la norme ISO 8601, je voulais ajouter cette mise à jour pour que si quelqu'un rencontre ce problème, il n'ait pas à lire les commentaires pour obtenir la réponse. Le problème, à la fois pour la chaîne originale en question P72H
y P2M2W5D
est que la chaîne de caractères doit être conforme au schéma XML du W3C (voir la documentation de l'outil XmlConvert.ToTimeSpan (en anglais) ). Lorsque nous regardons le schéma XML du W3C (lien ci-dessus), il renvoie à la norme ISO 8601, et en particulier à la section 5.5.3.2.1 qui donne la raison pour laquelle W
n'est pas un caractère valide dans le schéma XML :
Puisque les semaines n'ont pas de point de report défini (52 ou ne doivent pas être utilisées dans ces applications
0 votes
@Oded Il ne s'agit pas d'une question sur le formatage des chaînes de caractères dans .NET.
0 votes
Pour être clair, je n'obtiens pas d'exception à cause d'une incompatibilité de type, mais à cause de l'erreur d'identification de l'utilisateur.
XmlConvert.ToTimeSpan
méthode. Il s'agit d'une question sur la conversion d'une chaîne de durée standard ISO8601 en un format utilisable en C#.0 votes
@Magnus
P72H
signifie une durée de 72 heures