Comment puis-je convertir un ISO8601 TimeSpan C# laps de Temps?
Je suis System.FormatException
quand j'essaie de faire ce qui suit (par exemple):
TimeSpan ts = XmlConvert.ToTimeSpan("P72H");
Je l'ai étudié la Norme ISO8601 et il semble être correct, mais je n'arrive pas à analyser heures sans lever une exception, peu importe ce que je fais.
Merci!
EDIT:
Exception détails:
System.FormatException was unhandled by user code
HResult=-2146233033
Message=The string 'P72H' is not a valid TimeSpan value.
Source=System.Xml
- Ce n'est pas une question à propos de .NET mise en forme de chaîne.
- pour être clair, je ne suis pas d'obtenir une Exception à partir d'une incompatibilité de type, je suis de la
XmlConvert.ToTimeSpan
méthode. C'est une question à propos de la conversion d'une norme ISO8601 durée chaîne en C# format utilisable. P72H
signifie une durée de 72 heures
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter le séparateur de Temps à votre chaîne. Essayez ceci:
Voir la durée de spécification http://www.w3.org/TR/xmlschema-2/#duration
D
est des jours, vous devez ajouter le temps de séparateurT
lorsque vous indiquer le temps.P2M5D
est valable aussi bien queP2M19D
qui je suppose est ce que vous souhaitez avec le2W
dans votre chaîne.W
ne fait pas partie de la ISO8601 schéma. Si vous signifiait 'Semaines', il suffit de convertir le2W
à14D
et il devrait fonctionner très bien.[System.Xml.XmlConvert]::ToTimeSpan("PT72H") | ft
Vous devez avoir raté quelque chose dans la norme. Suivantes:
me donne de la chaîne
PT12H
. Donc il semble que la partie heure doit être préfixé avec unT
. Et le suivant traite correctement:(Pour un
TimeSpan
que stringifies à1.01:00:00
.)Veuillez utiliser le format suivant pour
System.Xml.XmlConvert.ToTimeSpan("PnYnMnDTnHnMnS")
.P - Le marqueur doit être placé avant le format de date.
nY - Nombre d'années, ex: 2Y
nM - Nombre de mois ex: 4M
nD - Nombre de Jours ex: 6D
T - La désignation doit être placé avant le format de l'heure
nH - Nombre d'Heures ex: 8H
nM - Nombre de Minutes ex: 12M
nS - Nombre de secondes ex: 14S
System.Xml.XmlConvert.ToTimeSpan("P2Y4M6DT8H14M18S")
Ici, la confusion de la partie avec les Mois et les Minutes ont la même lettre pour désigner, mais l'indicateur d'utilisation les rend distinct pour comprendre facilement.