2009-09-13 8 views
1

Existe-t-il un moyen direct d'analyser une date iCalendar en .net à l'aide de C#? Une date iCalendar ressemble à ceci:analyse la date iCalendar à l'aide de C#

2009-08-11T10:00+05:0000 

J'ai besoin de l'analyser pour l'afficher dans un format ... merci

+0

trouvé une demi réponse. en utilisant DateTime .. :: Parse Méthode (String, IFormatProvider, DateTimeStyles) avec style comme Aucun un fournisseur de format d comme culturecurrent, mais je reste un problème, le iCalendar date ci-dessus soulève une exception, apparemment, il ne permet pas les deux derniers zéros! Je ne sais pas ce que sont les deux derniers zéros, mais y a-t-il un moyen de contourner cela? – Ayyash

+0

Voir ma réponse ci-dessous, j'avais supposé que cette date représentait 10:00 + 5 heures, c'est-à-dire 15:00 (15:00). –

Répondre

1
string strDate = "2009-08-11T10:00+05:0000"; 
DateTimeFormatInfo dtfi = new DateTimeFormatInfo(); 
dtfi.FullDateTimePattern = "yyyy-MM-ddTHH:mmzzz"; 

DateTime dt = DateTime.Parse(c.Substring(0, c.Length-2), dtfi); 

zzz est pour le fuseau horaire, mais il est reconnu que lorsqu'elle est exprimée comme suit: + xx: xx . J'ai testé avec votre exemple, en supprimant les 2 derniers 0, puis l'analyse avec un DateTimeFormatInfo personnalisé fonctionne.

0

Vous pouvez utiliser DateTime.Parse() à tout analyser avant +. Je ne connais pas la spécification du format iCalendar mais je suppose que le + est les heures/minutes à ajouter à la date avant le +. Vous pouvez donc utiliser AddHours() et AddMinutes() pour ajouter les bits requis au DateTime renvoyé par DateTime.Parse().

Cela nécessite un peu d'analyse syntaxique de chaîne, mais avec un peu de regex vous devriez être bien ...

0

Puisque ce n'est pas une chaîne de format standard, mais vous savez le format exact, vous pouvez utiliser DateTime.ParseExact et spécifier a custom format string, comme ceci:

DateTime.ParseExact(d, "yyyy-MM-ddTHH:mmzzz00", CultureInfo.InvariantCulture); 

Le spécificateur « zzz » représente les heures et les minutes décalées par rapport à UTC, et les deux zéros finaux sont juste des littéraux pour correspondre au format avec lequel vous traitez.