Как преобразовать '2012-02-06T23: 18: 17Z' в DateTime - PullRequest
0 голосов
/ 13 февраля 2012

Я создаю приложение для анализа xml, предоставленного iTunes в C #, и у меня возникают некоторые проблемы с полями «Дата добавления» и «Дата изменения», которые имеют следующий синтаксис:

2012-02-06T23: 18: 17Z

я пробовал это:

DateModified = DateTime.ParseExact(s.Element("DateModified").ToString(), "yyyy-MM-ddTHH:mm:ssZ", System.Globalization.CultureInfo.InvariantCulture)

, но приложение не работает с FormatException

{"String was not recognized as a valid DateTime."}

Ответы [ 4 ]

5 голосов
/ 13 февраля 2012

Если вы используете LINQ to XML, то вы можете просто привести элемент к DateTime; это автоматически анализирует дату и время с правильной строкой формата:

dateModified = (DateTime)s.Element("DateModified");

В противном случае вы можете использовать XmlConvert.ToDateTime:

dateModified = XmlConvert.ToDateTime(s.Element("DateModified").Value, XmlDateTimeSerializationMode.Utc);
5 голосов
/ 13 февраля 2012

Я считаю, что s.Element("DateModified").ToString() не выводит то, что вы думаете.

Это работает, как и ожидалось:

var d = DateTime.ParseExact("2012-02-06T23:18:17Z", "yyyy-MM-ddTHH:mm:ssZ", System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine(d.ToString());
1 голос
/ 13 февраля 2012

Предполагая, что это Linq to Xml, вам нужно получить значение элемента, поэтому сделайте это вместо:

DateModified = DateTime.ParseExact(s.Element("DateModified").Value, "yyyy-MM-ddTHH:mm:ssZ", System.Globalization.CultureInfo.InvariantCulture);
0 голосов
/ 13 февраля 2012

Ничего особенного:

var str = "2012-02-06T23:18:17Z";
DateTime t = DateTime.Parse(str, CultureInfo.InvariantCulture);
t.ToUniversalTime();
...