2010-08-18 7 views
10

Existe-t-il une méthode intégrée dans .NET 3.5 pour convertir une période ISO 8601 en .NET TimeSpan/ticks/millisecondes?Conversion d'une période au format ISO 8601 en ticks/millisecondes

+0

@Timwi: Je suis un grand fan de brièveté. Cependant, je suis aussi une personne naturellement amicale. Alors, qu'est-ce qui ne va pas de souhaiter à tous une bonne journée de travail? – yas4891

+0

car le style de SO (et des autres sites réseau Stack Exchange) est de ne pas le faire. Pour la discussion, utilisez http://meta.stackoverflow.com. – Richard

+0

En l'enlevant, je n'indique pas qu'il n'est pas amical. C'est juste que ça n'apporte vraiment rien à la question. Rappelez-vous que ce n'est pas un forum de discussion avec des messages individualisés. – Timwi

Répondre

1

Malheureusement, rien n'est directement intégré dans .NET.

Et il n'y a pas TimeSpan.ParseExact avant .NET 4 qui pourrait être utilisé si les composants de la chaîne sont connus.

+0

marqué répondu pour être le premier à répondre. – yas4891

2

Même s'il n'y a rien directement dans le framework .Net, j'ai trouvé que Joda.org a mis en œuvre une telle chose et je me suis souvenu que Jon a fait un port à .Net appelé noda-time. Une première vue dans this source code montre qu'il a implémenté quelque chose ici à cet effet. Peut-être devriez-vous faire d'autres recherches dans ce projet.

+0

Merci pour ce lien. travail assez impressionnant fait là – yas4891

1

Il n'y a pas de manière intégrée. Pour compliquer davantage les choses, ISO 8601 durations est en fait totalement incompatible avec TimeSpan ou tout autre moyen de mesurer le temps. La raison en est que les durées ISO 8601 peuvent contenir des années et des mois. Le problème avec cela est qu'une année peut avoir 365 ou 366 jours et un mois de 28 à 31 jours. Joda-Time solves this problème en reliant ces périodes inexactes à un instant dans le temps.

Sauf si vous êtes chanceux et les périodes arrive d'utiliser le P [AAAA] - [MM] - [JJ] T [hh]: [mm]: format [ss] car alors vous venez:

string period = "P0003-06-04T12:30:05"; 
TimeSpan span = new TimeSpan(DateTime.Parse(period.Remove(0,1)).Ticks); 
+0

Pour ma tâche spécifique cela devrait normalement être quelque chose comme "PT1S" ou "PT0.05999999999S", donc l'analyse n'est pas un vrai problème. Je voulais juste avoir une bonne solution pour cela. Merci pour votre réponse! – yas4891

Questions connexes